golang中的struct還是有點意思的,相比於c++中的型別要好用很多。
golang的資料成員放到乙個struct中,又為該struct配上相應的方法,這就形成了封裝資料成員和方法的class。
相比於c++,golang沒有繼承,而是支援巢狀,以組合的形式完成相同的功能,這就使golang的邏輯非常清晰。
最近在寫程式時碰到了乙個小問題,讓我困惑了一下。這裡只是想判斷filemeta是否為空,便使用==nil來判斷,但是發現struct不能和nil比較,原因是不能將nil轉換為struct。在琢磨這個問題的時候也找了不少資料,又對golang的struct有了新的認識,或者說是補充一些漏洞。其實這個問題應該放在nil相關的問題中,但是思來想去還是放在struct裡吧。(nil這個東西真的是,,一言難盡)
struct也不能賦值為nil,如 var s student = nil ,會報錯告訴我們不能這樣分配。而struct指標是可以的,如var s *student = nil
空結構體是沒有field的結構體型別,沒有成員,如下所示。空struct的寬度為0,佔據零位元組空間。所以巢狀的空結構體還是佔據零空間。var s student{}
type s student {}
1. 空struct可以作為方法接收者來使用,如下。
2. 空struct用於channel通知訊號,不占用記憶體(是嗎??),不能寫入資料只能通過關閉進行輸出,如進行同步。type s struct{}
func (s *s) addr()
func main()
3. 空struct作為array或map的值,不占用記憶體ch := make(chan struct{})
var x [100]int
var y [100]struct{}
fmt.println(unsafe.sizeof(x)) //800
fmt.println(unsafe.sizeof(y)) //0
上面我遇到的問題最後是用過引入乙個方法解決的。不能使用if判斷,就乾脆做乙個方法自己去判斷。 if isempty() 來得到判斷結果。func (f filemeta) isempty() bool )
}
Golang學習筆記(六) struct
struct struct,一組欄位的集合,類似其他語言的class 放棄了大量包括繼承在內的物件導向特性,只保留了組合 composition 這個最基礎的特性 1.宣告及初始化 複製 如下 type person struct 初始化 func main fmt.println p1.name ...
golang學習筆記 struct 2
go語言中,也和c或者其他語言一樣,我們可以宣告新的型別,作為其它型別的屬性或字段的容器。例如,我們可以建立乙個自定義型別person代表乙個人的實體。這個實體擁有屬性 姓名和年齡。這樣的型別我們稱之struct。如下 所示 type person struct 看到了嗎?宣告乙個struct如此簡...
Golang中的struct比較
可比較的資料型別除了上述三種外,還有boolean,complex,pointer,channel,inte ce和array 不可比較的資料型別包括,slice,map,和function 不包含不可比較的成員變數 reflect.deepequal函式,指標和例項均可以比較 無論有沒有包含不可比...