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通常不推断事物或允许不明确的语法。与代码简短相比,编译器速度更快。