golang中结构体初始化的语法格式
在Go语言中,结构体(struct)的初始化可以通过以下几种方式来进行:
-
键值对初始化(字段名明确指定):
当结构体字段很多或者你需要只初始化部分字段时,可以采用键值对的方式来初始化结构体。每个字段名后面跟一个冒号和它的值。type Person struct { Name string Age int City string } // 键值对初始化 person := Person{ Name: "Alice", Age: 25, // City 字段在这里未初始化,其值将是零值(对于字符串则是 "") } // 全部字段初始化 person2 := Person{ Name: "Bob", Age: 30, City: "New York", } -
值列表初始化(按顺序初始化):
如果结构体字段数量不多,并且你希望按顺序初始化所有字段,可以不使用字段名而直接列出值。type Point struct { X int Y int } // 值列表初始化 point := Point{10, 20} -
隐式字段名初始化(如果字段名与变量名相同):
当外部变量名与结构体字段名相同时,可以在初始化时省略字段名。type User struct { Username string Password string } username := "user1" password := "password1" user := User{username, password} -
结构体字面量与复合字面量:
从Go 1.17开始,还可以使用结构体字面量(Composite Literals)特性,即使结构体字段名与外部变量名不同,也可以通过=:来指定字段名。user := User{ Username: = username, Password: = password, } -
new() 函数初始化:
使用new()函数分配内存并返回指向结构体类型的指针,此时结构体的所有字段都是它们各自的零值。u := new(User) // u 是 *User 类型,所有字段都为零值 -
匿名结构体初始化:
可以在声明时直接初始化匿名结构体。anonymous := struct { Field1 string Field2 int }{"Value1", 42} -
嵌套结构体初始化:
如果结构体包含嵌套结构体,也可以递归地初始化它们。type Address struct { Street string Zip string } type Person struct { Name string Address Address } person := Person{ Name: "Charlie", Address: Address{ Street: "123 Main St.", Zip: "12345", }, }
Do not communicate by sharing memory; instead, share memory by communicating.

浙公网安备 33010602011771号