声明结构体
定义结构体使用struct
关键字。在结构体内部定义它们的成员变量和类型。如果成员变量的类型相同还可以把它们写到同一行。
struct里面可以包含多个字段(属性)
struct类型可以定义方法,注意和函数的区分
struct类型是值类型
struct类型可以嵌套
golang中没有class类型,只有struct
golang中没有public、protected、private的的声明。属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法同上。
type stu struct { name string age uint8 }
结构体访问
func main() { var stu1 = stu{ Name: "zhangsan", age: 14, } fmt.Println(stu1.Name) fmt.Println(stu1.age) }
定义struct
var stu1 = stu{ Name: "zhangsan", age: 14, } //stu2和stu3返回的都是指向结构体的指针 var stu2 = new(stu) var stu3 *stu = &stu{ Name: "lisi", age: 99, }
struct初始化
struct的内存布局:struct中的所有字段在内存是连续的
package main import ( "fmt" ) type stu struct { Name string age uint8 } func main() { var stu2 = new(stu) var stu3 *stu = &stu{ Name: "lisi", age: 99, } var stu1 = stu{ Name: "zhangsan", age: 14, } fmt.Printf("%p\n", &stu1.Name) fmt.Printf("%p\n", &stu1.age) fmt.Printf("%p\n", &stu2.Name) fmt.Printf("%p\n", &stu2.age) fmt.Printf("%p\n", &stu3.Name) fmt.Printf("%p\n", &stu3.age) }
package main import ( "fmt" ) type test struct { name string age int intro string } func main() { var stu test stu.name = "zhangsan" stu.age = 22 stu.intro = "mtnmdn" var stu1 = &test{ name: "lisi", age: 12, intro: "dasdadasd", } fmt.Println(stu) fmt.Println(stu1) }