golang中,struct属于用户定义类型,代表一组字段或属性的集合,它可包含零个或多个任意类型的字段。

声明struct

要声明结构,需要使用 struct 关键字.
具体语法如下:

// =======  声明结构体
// type 结构体名 struct {
//	属性名   属性类型
//	属性名   属性类型
//	...
// }

// Person 定义一个名为Person 的结构体
type Person struct {
  // 相同类型的可以只写一个类型,推荐分开写
	name, gender string
	age          int
	mother       *Person // 指针
	father       *Person
}

命名struct和匿名struct

创建一个命名的struct(named Student struct),类型为Student

type Student struct {
	name   string
	course string
	score  int
}

func main() {
	// 创建struct,指定字段
	stu1 := Student{
		course: "Math",
		name:   "Jack",
		score:  80,
	}
	// 创建struct,不指定字段,字段按声明的顺序
	stu2 := Student{
		"Jack",
		"PE",
		100,
	}

	fmt.Println(stu1)
	fmt.Println(stu2)
	// {Jack Math 80}
	// {Jack PE 100}

}

创建一个匿名struct

func main() {

	stu3 := struct {
		name string
		age  int
	}{
		name: "Jack",
		age:  18,
	}
	//{Jack 18}
	fmt.Println(stu3)
}

访问struct 字段

可以使用 dot . operator 访问或修改struct 中的字段。
例如:

	stu3 := struct {
		name string
		age  int
	}{
		name: "Jack",
		age:  18,
	}
	name := stu3.name
	age := stu3.age
	// name: Jack,age: 18
	fmt.Printf("name: %s,age: %d\n", name, age)
	stu3.name = "Jack Ma"
	// {Jack Ma 18}
	fmt.Println(stu3)

指针struct

type Student struct {
	Name   string
	course string
	score  int
}

func main() {
	// stu *Student
	stu := &Student{
		Name: "Jack",
	}
	fmt.Println(stu.Name)
	fmt.Println((*stu).Name)
}

stu的类型是 *Student 指针类型。
可以通过 (*stu).Name 访问字段,不过golang中提供了简便的方式,可以不写星号,直接通过stu.Name 访问字段。