网络异常,图片无法展示
|
结构体组成
go
结构体的结构体主要由type
和struct
两个关键字组成
当字段首字母为大写时,可以被外部包访问,相当于
Java
的public
字段,当字段首字母为小写时,只能被当前包访问,外部包不能访问,相当于
Java
的private
字段结构体的名称也一样,小写时外部包就无法访问到这个结构体了。
type Address struct { Province string City string Country string Detail string }
网络异常,图片无法展示
|
声明结构体
- 字面量声明
addr:=Address{ Province: "浙江省", City: "杭州市", Country: "滨江区", Detail: "阿里巴巴", }
var
声明
var addr Address addr.Province="浙江省" addr.City="杭州市" addr.Country="滨江区" addr.Detail="阿里巴巴"
嵌套
一个结构体也可以包含另一个结构体,例如:
type People struct { Name string Addr Address Age int alias string } type Address struct { Province string City string Country string Detail string }
上面的People
结构体包含了Address
结构体,然后在声明的时候可以这样
zheng:=People{ Name: "", Addr: Address{ Province: "", City: "", Country: "", Detail: "", }, Age: 0, alias: "", }
方法
go
的函数的接收器就是对应这个接收器的方法
网络异常,图片无法展示
|
值接收器
使用值接收器时,在方法里对接收器进行修改时,不会影响源接收器的数据
func (p People) Info() { }
指针接收器
使用指针接收器时,在方法里对接收器进行修改会影响源接收器的数据
func (p *People) Update() { }
多态
当多个方法实现同一个接口的方法时,就可以使用多态了
import "fmt" func main() { var li Lilei speak(li) var z ZhangSan speak(z) } // 函数 func speak(say Say) { say.Say() } // 定义接口 type Say interface { Say() } // 结构体 type Lilei struct { } type ZhangSan struct { } // 实现方法 func (l Lilei) Say() { fmt.Println("我是李雷") } func (z ZhangSan) Say() { fmt.Println("我是张三") }
标签
在我们定义结构体时,同时还可以给字段设置标签。一般常用的标签有json
和xml
。然后可以通过反射把字段映射到设置的标签上。
设置标签时 字段首字母要大写
- 单个标签
type People struct { Name string `json:name` }
- 多个标签
同时也可以定义多个标签
两个类型的标签中间用空格隔开
type People struct { Name string `json:"province" xml:"province"` }