Go语言结构体
- struct里面可以包含多个字段(属性)
- struct类型可以定义方法,注意和函数的区分
- struct类型是值类型
- struct类型可以嵌套
- struct中的所有字段在内存是连续的
- 结构体是用户单独定义的类型,不能和其他类型进行强制转换
- struct没有构造函数,一般可以使用工厂模式来解决这个问题
- 工厂模式也就是定义一个全局函数,传入一些参数,返回一个结构体
- 结构体中字段可以没有名字,即匿名字段
- 此时如果匿名字段是一个结构,即讲解实现了继承
- struct中的每个字段,写上一个tag。这个tag可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Name string `json:"student_name"`
Age int `json:"age"`
Score int `json:"score"`
}
func main() {
var stu Student = Student{
Name: "stu01",
Age: 18,
Score: 80,
}
// 把这个结构体打包
data, err := json.Marshal(stu)
if err != nil {
fmt.Println("json encode stu failed, err:", err)
return
}
fmt.Println(string(data))
}
输出:(输出的字段变为tag字段了)
{“student_name”:“stu01”,“age”:18,“score”:80}
- 初始化
var stu Student
var stu *Student = new (Student)
var stu *Student = &Student{}
type Student struct{
Name string
Age int
score float32 //同样有大小写
}
func main() {
var stu Student
stu.Age = 18
stu.Name = "周杰伦"
stu.score = 80
var stu1 *Student = &Student{
Age:20,
Name:"林秀贤",
}
var stu2 =Student{
Age:20,
Name:"李之胜",
}
fmt.Println(stu)
fmt.Println(stu1)
fmt.Println(stu2)
}
- 方法:Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以
有方法,而不仅仅是struct
func (recevier type) methodName(参数列表)(返回值列表){}
type A struct {
a int
}
func (t A) test() {
fmt.Println(t.a)
}
var t A
t.test()
- 方法和函数的区别
函数调用: function(variable, 参数列表)
方法:variable.function(参数列表)
- 如果一个变量实现了String()这个方法,那么fmt.Println默认会调用这个
变量的String()进行输出。
来源:CSDN
作者:Christ丶李
链接:https://blog.csdn.net/weixin_44879611/article/details/104156801