声明结构体
定义结构体使用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)
}