初始結構體,被這個玩意兒搞糊塗了。
我個人的理解,結構體,就是先定義那麼一個玩意兒,由他這個結構可以創建出對應的結構變量。可以把結構體想成數據庫裏面的一張表,結構體類似於js的object對象,我暈,這有點像json這種結構了。
然後又有點像python的類。但是裏面的字段好像只支持常規的吧。先上代碼再說
type books struct {
title string
author string
sub string
id int
price float32
}
定義好了過後,最開始再想怎麼用,是不是需要定義個變量,然後用new方法去實例化一個結構?
b := new(books){"Go 語言", "www.runoob.com", "Go 語言教程", 2,1}
最開始這樣想的,但是很抱歉,這是錯誤的寫法。後面根據菜鳥教程,正確寫法應該跟python裏面直接實例化一個類是一樣的:
b:=books{"Go 語言", "www.runoob.com", "Go 語言教程", 2,1}
b.author = "name"
fmt.Println(b)
把變量b實例化一個books結構出來,然後就可以修改裏面的字段了,用b.author改變結構裏的作者字段。
這應該是常規用法吧。後面我想想結構體裏面能不能放數組字段,然後定義了一個如下的結構體:
type dict struct {
key string
value string
tmp []int
}
確實沒報錯,但是實例化的時候卻不行了
dc := dict{key:"name",value:"大神",tmp:{5,6}}
fmt.Println(dc)
後面發覺肯定是自己的原因,改成如下就ok了:
dc := dict{key:"name",value:"大神",tmp:[]int{1,2}}
fmt.Println(dc)
看來直接寫一個數組的值還是挺麻煩啊,python裏面只需要寫個[1,2],go裏面還必須至少寫成[]int{1,2},如果可以直接寫{1,2}多好啊
可惜了,我知道這是不太現實的,勉強接受吧
2.結構體也是一個變量,可以函數傳參傳遞它的指針,跟其他用法一致的
3.結構體重要的操作,綁定內部函數,可以實現像python裏的類一樣
type books struct {
title string
author string
sub string
id int
price float32
}
func (f *books) get_title() string{
return f.title
}
func main(){
b:=books{"Go 語言", "www.runoob.com", "Go 語言教程", 2,1}
fmt.Println(b.get_title())
}