Go语言struct类型介绍
struct
我们可以声明新的类型,作为其它类型的属性或字段容器。
如,创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名&年龄。这样的类型我们称之为struct。
typepersonstruct{ namestring ageint }
varPperson//P现在就是person类型的变量了 P.name="Astaxie"// 赋值"Astaxie"给P的name属性. P.age=25// 赋值"25"给变量P的age属性 fmt.Printf("Theperson'snameis%s",P.name)// 访问P的name属性.
除了上面这种P的声明使用之外,还有其他两种声明使用方式
1、按照顺序提供初始化值
P:=person{"Liuxinming",28}
2、通过field:value的方式初始化,这样可以任意顺序
P:=person{age:28,name:"Liuxinming"}
举例:
packagemain
import"fmt"
//声明一个新的类型 typepersonstruct{ namestring avg int }
//比较两个人的年龄,返回年龄大的那个人,并且返回年龄差 //struct也是传值的 funcolder(p1,p2person)(person,int){ ifp1.avg>p2.avg{//比较p1和p2年龄 returnp1,p1.avg-p2.avg } returnp2,p2.avg-p1.avg }
funcmain(){ vartomperson //赋值初始化 tom.name,tom.avg="Tom",18
//两个字段都写清楚的初始化 bob:=person{avg:25,name:"Bob"}
//按照struct定义顺序初始化 paul:=person{"Paul",43}
tb_Older,tb_diff:=older(tom,bob) tp_Older,tp_diff:=older(tom,paul) bp_Older,bp_diff:=older(bob,paul)
fmt.Printf("Of%sand%s,%sisolderby%dyears\n", tom.name,bob.name,tb_Older.name,tb_diff) fmt.Printf("Of%sand%s,%sisolderby%dyears\n", tom.name,paul.name,tp_Older.name,tp_diff) fmt.Printf("Of%sand%s,%sisolderby%dyears\n", bob.name,paul.name,bp_Older.name,bp_diff) }