Golang结构体声明与使用
一.struct结构体特征
- go中的结构体有点类似于其他编程语言中的对象
- go中的结构体可以用.语法访问里面的属性/字段
- go中的结构体别名和属性/字段首字母需大写否则别的包无法访问此结构体类似于private和public
- go中的结构体属性/字段重复赋值会覆盖之前的值
- go中的结构体是值类型,不是引用类型
- go中的结构体如果在使用json转义的情况下,想要发送给客户端的属性/字段不是大写必须加上tag标签如
json:xxx属性/字段名
二.struct结构体声明和使用
- 结构体声明的四种方法
- 结构体是值类型,传入函数中改变结构体不会影响外部的结构体,如果要改变外部结构体则需要传入地址
1>这里并不会修改到名称
2>传入地址后可以修改名称 - go中的结构体如果在使用json转义的情况下,想要发送给客户端的属性/字段不是大写必须加上tag标签
1>这里没有使用tag标签字段名称都是大写
2>这里添加tag标签
3>转成json后字段名变成了小写
三.代码块
package main
import (
"encoding/json"
"fmt"
)
type Monster struct {
Name string `json:"name"`
Age int `json:"age"`
Arms string `json:"arms"`
}
func changeStruct(s *Monster) {
s.Name = "修改你的名称"
}
func main() {
monster := Monster{"孙悟空", 500, "金箍棒"}
fmt.Println(monster)
var monster1 Monster
monster1.Name = "猪八戒"
monster1.Age = 500
monster1.Arms = "九齿钉耙"
fmt.Println(monster1)
var monster2 Monster = Monster{}
monster2.Name = "红孩儿"
monster2.Age = 200
monster2.Arms = "火尖枪"
fmt.Println(monster2)
var monster3 Monster = Monster{"铁扇公主", 400, "芭蕉扇"}
fmt.Println(monster3)
changeStruct(&monster3)
fmt.Println(monster3)
jsonStr, err := json.Marshal(monster2)
if err != nil {
panic("json转换失败")
}
fmt.Println(string(jsonStr))
}