在声明了变量后,为什么必须通过类型来使函数生效?

时间:2019-07-10 02:07:00

标签: go

我想使用匿名结构来做某事。

var users []struct{
    Name string `json:"name,omitempty"`
    Age int
}

我必须再次写类型以设置值

users = make([]struct{
    Name string `json:"name,omitempty"`
    Age int
}, 0, 10)

如果我坚持使用匿名结构,有什么办法可以使它更体面?

(如果没有,我想知道为什么golang设计会产生这样的功能...)

2 个答案:

答案 0 :(得分:1)

一次性使用匿名结构很方便。

如果多次使用它,请定义一个命名结构类型。

如果仅在单个函数中使用它,则可以在该特定函数的范围内定义类型,因此很明显它不能在其他地方使用:

func myfunc() {
    type MyType struct {
        Name string
    }
    m := MyType{Name: "Hello, World!"} // this type can only be used within this func
    fmt.Println(m)
}

答案 1 :(得分:0)

  

如果我坚持使用匿名结构,有什么办法可以使它更体面?

是的,有。使用:=

users := make([]struct{
    Name string `json:"name,omitempty"`
    Age int
}, 0, 10)

当然,这仅在定义变量后立即调用make时有效。如果这些位被其他代码分隔,则此技巧对您不起作用。

但是不要害怕命名您的类型。无论如何(不管有没有:=,这通常都是更好的方法。