Go 具有切片结构的隐式类型
如果我有这样一个文件:Go 具有切片结构的隐式类型,go,struct,types,slice,Go,Struct,Types,Slice,如果我有这样一个文件: package main import "fmt" type Language struct { Example []string Link []string } func main() { o := Language{ {".go", "go.ps1"}, {"golang.org", "go.dev"}, } f
package main
import "fmt"
type Language struct {
Example []string
Link []string
}
func main() {
o := Language{
{".go", "go.ps1"},
{"golang.org", "go.dev"},
}
fmt.Println(o)
}
[]string{".go", "go.ps1"},
[]string{"golang.org", "go.dev"},
我得到这个结果:
missing type in composite literal
我发现我可以这样解决:
package main
import "fmt"
type Language struct {
Example []string
Link []string
}
func main() {
o := Language{
{".go", "go.ps1"},
{"golang.org", "go.dev"},
}
fmt.Println(o)
}
[]string{".go", "go.ps1"},
[]string{"golang.org", "go.dev"},
但这是严格要求的吗?我想Go会知道每种类型
属性。这里的问题不是编译器不知道类型,而是复合文字的语法需要类型:
字符串数组文字是[]字符串{A,b,c},而不是{A,b,c}。在结构定义中需要字段,如下所示
o := Language{
Example: []string{".go", "go.ps1"},
Link: []string{"golang.org", "go.dev"},
}
fmt.Println(o)
是的,它是必需的,与错误状态完全相同。Go通常不推断事物或允许不明确的语法。与代码简短相比,编译器速度更快。