跟着猫哥学Golang[6] - 结构体

百般思念 提交于 2019-12-04 23:23:26

非常类似于C语言,Golang中的一个结构体(struct)就是一个字段的集合。 

1. Golang定义结构体很简单:

type XXX struct {

     ......

}

访问结构体的变量,直接用点号“.”连接。来看个简单的例子:

package main

import "fmt"

type person struct {
	Name string
	Age int
	Gender string
}

func main() {
	fmt.Println(person{"Tom", 22, "male"})
	var Jerry person
	Jerry.Name = "Jerry"
	Jerry.Age = 21
	Jerry.Gender = "male"
	fmt.Println(Jerry) 
}
#输出:
{Tom 22 male}
{Jerry 21 male}


2. 不得不说的指针

提到Golang的结构体,就不得不提到指针,又是很类似C语言的,&取地址,*取内容。

首先,Golang没有指针运算。结构体字段可以通过结构体指针来访问,通过指针间接的访问是透明的。 非结构体没有指针运算?留个小小疑问自己探索吧。

package main

import "fmt"

type person struct {
	Name string
	Age int
	Gender string
}

func main() {
	L := person{"Li Lei", 22, "male"}
	fmt.Println(L)
	H := &L
	H.Name = "Han Meimei"
	H.Gender = "female"
	fmt.Println(L)
}
#输出:
{Li Lei 22 male}
{Han Meimei 22 female}
看明白了吗?H拿到了L的地址,H直接操作L的内容...于是LL变成了HMM 偷笑


3. 结构体文法:

通过结构体字段的值作为列表来新分配一个结构体。 特殊的前缀 & 构造了指向结构体文法的指针。 上面的例子已经简单提到了。

package main

import "fmt"

type person struct {
	Name string
	Age int
	Gender string
}

func main() {
	Lilei := person{"Li Lei", 14, "male"}
	Hmm := &person{"Han Meimei", 14, "female"}
	Jim := person{Name:"Jim", Gender: "uncertain"}
	gato := person{Name:"Guo"}
	
	fmt.Println(Lilei, Hmm, Jim, gato)
}
#输出:
{Li Lei 14 male} &{Han Meimei 14 female} {Jim 0 uncertain} { Guo }
结构体可以仅仅给部分成员赋值。



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!