结构体的格式如下:
type 结构体 struct{
字段名称 类型
}
type Chef struct {
Name string // 名称
Age int // 年龄
Honor // 荣誉
Trainee *Chef // 徒弟 可以认为徒弟有多个,用切片表示
}
type Honor struct {
Title string
GetTime time.Time // 获奖时间
}
结构体的使用
li := Chef{
Name :"李老师",
Age:25,
Honor:Honor{},
Trainee:nil
}
结构体和JSON
// 结构体转成JSON
import {
"encoding/json"
"fmt"
}
type Chef struct {
Name string
Age int
}
func main() {
c:= Chef{
Name:"老王",
Age:28
}
marshal,err:= json.Marshal(&c)
if err != nil {
fmt.Println(err)
}
fmt.Println(marshal) // {"Name":"老王","Age":28}
}
// JSON转成结构体
var cc chef
s:= '{"Name":"小李","age":24}'
err = json.Unmarshal([]byte(s),&cc)
if err != nil {
fmt.Println(err)
}
fmt.Println(cc.Name) //小李
fmt.Println(cc.Age) // 24
方法
方法可以看作某种特定类型的函数,方法的声明和普通函数的声明类似,只是在函数名称多一个参数,这个参数是类型
// 使用方式
func (接收者 接收者类型) 方法名称(参数列表...)(返回值列表){
方法体
return
}
// 添加两个方法
func (c Chef) Cook(name string) string {
return c.Name+": 做好了" + name
}
func (c Chef) FavCook(name string) string{
return c.Name +":这是我的拿手菜"+name +",做好了"
}
// 上面方法同样可以用函数表示
func Cook(c Chef,name string)string{
return c.Name+": 做好了" + name
}
func FavCook(c Chef,name string) string{
return c.Name +":这是我的拿手菜"+name +",做好了"
}
说明:
参数c是方法的接收者,在go语言中接收者无须使用特殊名字