12.结构体¶
go语言提供了和C语言类似的结构体。
声明¶
Go语言中的结构体变量和C语言一样,有两种声明方式:
1.直接声明变量
2.使用type先声明类型
Note
go语言结构体中的成员变量名也遵循首字母大小写导出规则,当首字母时大写时,可以被外部包访问,但小写开头的成员变量则不能被外部包直接访问。
访问成员变量¶
和C语言一样,直接使用<变量名>.<成员变量名>
即可。
Note
go语言中的结构体可以直接用fmt.Print()
等直接打印,结果格式如下:
{memberValue1, memberValue2, ...}
对于格式化打印,可以使用%v
输出上述格式,也可以使用%+v
同时输出成员变量名。
结构体字面值¶
可以使用如下的写法来表示一个结构体的字面值:
<structName>{<memberName1>: <value1>, <memberName2>: <value2>, ...}
// 或者更简洁的方式
<structName>{<value1>, <value2>, ...}
Note
上述两个字面值,前者可以允许任意顺序的成员变量,而后者必须按照成员变量的顺序。
当某个成员变量没有值时,默认为相应类型的零值。
结构体之间的赋值¶
go语言中的结构体和C语言一样,是实际变量,故相互赋值时,会将整个数据复制一份,各变量之间互不影响。
结构体编码Json¶
go语言提供了一个包encoding/json
,其中的Marshal
函数可以将结构体转化为Json
字符串。
使用方法:
import "encoding/json"
...
bytes, err := json.Marshal(<structVariable>)
jsonString = string(bytes)
fmt.Println(jsonString)
...
Note
当使用json.Marshal
时,需要注意结构体的成员变量的可见性,只有对外部可见的成员变量在转换后才会显示在json中。
如果需要转换的json中的键必须不是大写开头的,则需要使用标签功能标记,如: