1. 结构体是类型中带有不同成员的复合类型。 Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。 Go 语言中的类型可以被实例化,使用 new 或 & 构造的类型实例的类型是类型的指针。 结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。 字段有以下特性: 字段拥有自己的类型和值。 字段名必须唯一。 字段的类型也可以是结构体,甚至是字段所在结构体的类型
2.
使用type和struct关键字来定义结构体,代码格式如下:
type 类型名 struct {
字段名 字段类型
字段名 字段类型
…
}
以下是更为具体的结构体定义及实例化与用法输出
package main
import "fmt"
//1.普通结构体定义,但只是定义,还要实例化才能用哦
//实例化后,没有初始化赋值的结构体,其成员变量都是对应变量的零值
type student struct { //名字为student的结构体
name string
gender string
age, height int
}
//2.匿名结构体,在定义一些临时数据结构的场景下可以用匿名结构体(就是不用单独写一个结构体出来了,在用到的地方写就好)
//3.结构体指针
func main() {
//1.结构体实例化,与c语言有所不同
var lbd student //结构体本身也是一种类型,用var关键字实例化lbd拥有该结构体
lbd.age = 20 //实例化后用"."运算符操作该结构体内的元素
lbd.gender = "man"
lbd.name = "lbd"
lbd.height = 500
fmt.Println(lbd)
fmt.Printf("%s\n------------------------\n", lbd.name)
//2.匿名结构体(用到的地方快速定义即可)
var user struct {
name string
age int
} //user被定义成了有该格式的结构体
user.age = 50
user.name = "lbd666"
fmt.Println(user.age, user.name, "\n", "--------------------------------")
//3.1结构体指针
//使用new函数实例化结构体,并得到该结构体地址(指针),Go语言支持指针用“.”运算符访问结构体成员
var address = new(student)
fmt.Printf("类型是:%T\n", address) //*main.student
address.age = 600
address.height = 17245
address.name = "lbdfighting"
address.gender = "man"
fmt.Printf("address=%#v\n-----------------------\n", address) //address=&main.student{name:"lbdfighting", gender:"man", age:600, height:172}
//3.2使用&对结构体取地址相当于new实例化该结构体
var address2=&student{}
fmt.Printf("%T\n",address2)
address2.age=1000
address2.gender="man"
address2.height=700
address2.name="I love yjr"
fmt.Println(address2.name)
fmt.Printf("address2=%#v\n------------------------\n",address2)
//4.结构体另一种初始化,键值对初始化(不要求与结构体顺序一样)
lbdgg:=student{
gender: "man",
name: "yjr",
age: 20,
height: 55,
}
fmt.Printf("%T\n",lbdgg)
fmt.Println(lbdgg.name,"\n","--------------------------")
//值的列表初始化(要求赋值与结构体定义的顺序一样)
lbd55:=student{
"ymh",
"man",
60,
20,
}
fmt.Printf("%v\n",lbd55)
}
运行结果如下:
{lbd man 20 500}
lbd
------------------------
50 lbd666
--------------------------------
类型是:*main.student
address=&main.student{name:"lbdfighting", gender:"man", age:600, height:17245}
-----------------------
*main.student
I love yjr
address2=&main.student{name:"I love yjr", gender:"man", age:1000, height:700}
------------------------
main.student
yjr
--------------------------
{ymh man 60 20}
忆昨未知道,临川每羡鱼。
世途行处见,人事病来疏。
微雨秋栽竹,孤灯夜读书。
怜君亦同志,晚岁傍山居
共勉!!