结构体
类似于js的类,关键字type
type 结构体名称 struct{ 名称 类型//成员或属性}package main
import "fmt"
type Student struct { Name string}
func (s Student) Study() { fmt.Printf("%s 正在学习\n", s.Name)}func main() { // 结构体 s1 := Student{Name: "张三"} s1.Study()}组合
类似继承,直接写需要组合的结构体
type Person struct { Name string}
type Student struct { Person Name string}package main
import "fmt"
type Person struct { Name string}
type Student struct { Person Name string}
func (s Student) Info() { fmt.Printf("姓名%s 性别%s \n", s.Name, s.Person.Name) //因为这里的Name冲突了。所以这里要加上Person.Name}
func (s Student) Study() { fmt.Printf("%s 正在学习\n", s.Name)}func main() { // 结构体 // 父类实例化 p1 := Person{Name: "男生"} //子类实例化 s1 := Student{Person: p1, Name: "张三"} s1.Study() s1.Info()}张三 正在学习姓名张三 性别男生结构体指针
func (s Student) SetName(name string) { s.Name = name}func main() { s1.SetName("李四") s1.Info()}姓名张三 性别男生这时候发现name并没有被修改成功,这时候需要把指针放到Student
func (s *Student) SetName(name string) { s.Name = name}结构体tag
type User struct { Name string Age int Password string}
func main() { user := User{Name: "张三", Age: 18, Password: "123456"} // 这里的_ 表示忽略错误 byteData, _ := json.Marshal(user) fmt.Println(string(byteData))}{"Name":"张三","Age":18,"Password":"123456"}这里输出的是json,但是一般json文件是小驼峰
type User struct { Name string `json:"name"` Age int `json:"age"` Password string `json:"-"` //这里表示不需要转}
func main() { user := User{Name: "张三", Age: 18, Password: "123456"} // 这里的_ 表示忽略错误 byteData, _ := json.Marshal(user) fmt.Println(string(byteData))}{"name":"张三","age":18}如果实例化的时候没有传参数,输出的值是初始化值
user := User{Name: "张三", Password: "123456"}{"name":"张三","age":0}type User struct { Name string `json:"name"` Age int `json:"age,omitempty"` //忽略空值 Password string `json:"-"` //这里表示不需要转}


