结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体,每一个值称为结构体的成员。下面分两方面介绍:一个是基础部分,一个是看一下结构体在实际内存中的内存模型。golang
结构体能够嵌套另外一个结构体。 结构体能够包含结构体类型的匿名成员,这样能够经过p.b就能够访问匿名成员结构体中的b。json
type User struct {
UserId int `json:"user_id"`
UserName string `json:"user_name"`
}
u := &User{UserId: 1, UserName: "xitehip"}
j, _ := json.Marshal(u)
fmt.Println(string(j))
// 输出内容:{"user_id":1,"user_name":"tony"}
复制代码
t := reflect.TypeOf(u)
field := t.Elem().Field(0)
fmt.Println(field.Tag.Get("json"))
复制代码
关于映射后续会有专门章节讲解。bash
代码实例:数据结构
type Person struct {
age int
class int
name string
}
var pp *Person
func main() {
p := Person{age:18, class:8, name:"xitehip"}
pp = &p
fmt.Println(*pp)
}
复制代码
编译生成的可执行文件,而后用gdb去分析内存布局见下图1 函数
由图1能够发现,结构体中的元素确实是连续排布的,只不过成员name存储的是指针。打印name指针的值发现确实是xitehip(可查看ascii表)这个字符串。oop
结构体是一种存储复合数据,主要应用于一个实体有多个数据类型的场景。在golang面向对象思想中,结构体也应用很是普遍,在后续的文章会详细讲解golang中的面向对象。布局
参考go语言圣经ui