結構體
尚硅谷Golang課
結構體
type Cat struct {
Name string
Age int
Color string
// S1 []int //可以是切片 但是預設值為nil(沒分配空間,一樣要先make後才能用)
}
//結構體是一個值類型,預設是值拷貝,比如cat1跟cat2是獨立存在兩個空間
func main() {
//創建Cat的變量
var cat1 Cat
cat1.Name = "小花"
cat1.Age = 18
cat1.Color = "花"
fmt.Println("cat1=", cat1)
// cat1.S1 = make([]int, 10)
// cat1.S1[0] = 100
// fmt.Println("cat1=", cat1)
//推薦方式
cat2 := Cat{"小黑", 5, "black"}
fmt.Println(cat2)
//方法3
//var c *C=new(C)
var cat3 *Cat = new(Cat)
//因為cat3是一個指針
(*cat3).Name = "小白"
//語法糖 cat3.Age也可以 ,不建議
cat3.Age = 6
fmt.Println(*cat3)
//方法4
//var c *C=&C{}
//因為c是一個指針 本來應該要用*...但是不用也行 草
var cat4 *Cat = &Cat{"阿皇", 0, "Yellow"}
cat4.Name = "阿煌"
(*cat4).Age = 1
fmt.Println(*cat4)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
p1 := Person{"aaa", 10}
fmt.Println(p1)
var p2 *Person = &p1
// fmt.Println(*p2.Age) //這樣寫會報錯。因為.的優先級比*高
fmt.Println(p2.Age) //語法糖
//用type重定義(類似於取別名)但是他會認為是2種類型
type Per Person
// var p3 Person = Person{"tommy", 5}
// var p4 Per
// //p3=p4 //這樣會報錯
// p4 = Per(p3) //這樣強轉
// fmt.Println(p3, p4)
fmt.Println("--------------")
//struct的每個字段上可以寫一個tag,該tag可以通過反射機制獲取,常用於序列化
pj := Per{"李四", 44}
jsonStr, err := json.Marshal(pj) //返回的是byte
if err != nil {
fmt.Println("錯誤")
}
fmt.Println(string(jsonStr)) //返回的是byte所以加一個string
}
上次修改於 2021-08-01
此篇文章的評論功能已經停用。