结构体的基本声明和使用方法如下:
package main
import (
"fmt"
)
// User 结构体描述了一个用户
type User struct {
FirstName, LastName string
Email string
Age int
userID int
}
// FullName 方法返回一个用户的全名
func (u *User) FullName() string {
return fmt.Sprintf("%s %s", u.FirstName, u.LastName)
}
func main() {
// 零值结构体
var u User
fmt.Printf("u: %#v\n\n", u)
// pu 的类型是 *User, 即一个指向User结构体的指针
pu := new(User)
pu.Age = 33
fmt.Printf("*pu: %#v\n", *pu)
// &User{} 跟 new(User) 是等价的
pu = &User{}
pu.Age = 18
fmt.Printf("*pu: %#v\n", *pu)
pu.FirstName, pu.LastName = "Jane", "Doe"
fmt.Printf("pu.FullName(): %s\n", pu.FullName())
}
u: main.User{FirstName:"", LastName:"", Email:"", Age:0, userID:0}
*pu: main.User{FirstName:"", LastName:"", Email:"", Age:33, userID:0}
*pu: main.User{FirstName:"", LastName:"", Email:"", Age:18, userID:0}
pu.FullName(): Jane Doe
结构体中每个值都被称为一个字段。
通常每行只写一个字段,字段的名字写在其类型的前面。
也可以把类型相同的连续字段写在一行,例如上例中的FirstName
和LastName
。
字段名用大写字母开头(如FirstName
)表示其为公有字段,即所有的代码都可以访问。
字段名用小写字母开头(如userID
)表示其为私有字段,只可以被相同package内的代码访问。