代码之家  ›  专栏  ›  技术社区  ›  ahmet alp balkan

匿名类型声明通过“var”与“:=”的工作方式不同

go
  •  2
  • ahmet alp balkan  · 技术社区  · 5 年前

    在Go中声明匿名类型的变量时,我看到 var v v:= 语法的作用不同。假设我们声明了一个空的匿名结构类型实例并将其分配给一个变量。

    这是有效的:

    func main() {
        var  v struct {}
        _ = v
    

    但这并不意味着:

    func main() {
        t := struct{}
        _ = t
    }
    

    编译时会出现以下错误( https://play.golang.org/p/MgbttbBVmYE ):

    prog.go:8:7: type struct {} is not an expression
    

    为什么是这个案子?

    1 回复  |  直到 5 年前
        1
  •  9
  •   Darshan Rivka Whittle Marek Lipka    5 年前

    var v struct{} 给予 v 类型 struct{} 但是没有显式地设置值,所以它得到了零值 {} .

    t := struct{} 不是一个完整的表达式。你需要 t := struct{}{} 创造 t 带类型 struct {} 给它价值 {} .

    换句话说, 结构{} 是一种类型,但正在创建 t型 具有 := 需要一个值,而不仅仅是右边的类型。 struct{}{} 是如何编写匿名空结构的文本形式的。