Golang學習 struct的一些事情

2021-09-13 13:23:55 字數 1378 閱讀 8793

golang中的struct還是有點意思的,相比於c++中的型別要好用很多。

golang的資料成員放到乙個struct中,又為該struct配上相應的方法,這就形成了封裝資料成員和方法的class。

相比於c++,golang沒有繼承,而是支援巢狀,以組合的形式完成相同的功能,這就使golang的邏輯非常清晰。

最近在寫程式時碰到了乙個小問題,讓我困惑了一下。這裡只是想判斷filemeta是否為空,便使用==nil來判斷,但是發現struct不能和nil比較,原因是不能將nil轉換為struct。

其實這個問題應該放在nil相關的問題中,但是思來想去還是放在struct裡吧。(nil這個東西真的是,,一言難盡)

struct也不能賦值為nil,如 var s student = nil ,會報錯告訴我們不能這樣分配。而struct指標是可以的,如var s *student = nil

在琢磨這個問題的時候也找了不少資料,又對golang的struct有了新的認識,或者說是補充一些漏洞。

空結構體是沒有field的結構體型別,沒有成員,如下所示。

var s student{}

type s student {}

空struct的寬度為0,佔據零位元組空間。所以巢狀的空結構體還是佔據零空間。

1. 空struct可以作為方法接收者來使用,如下。

type s struct{}

func (s *s) addr()

func main()

2. 空struct用於channel通知訊號,不占用記憶體(是嗎??),不能寫入資料只能通過關閉進行輸出,如進行同步。

ch := make(chan struct{})
3. 空struct作為array或map的值,不占用記憶體

var x [100]int

var y [100]struct{}

fmt.println(unsafe.sizeof(x)) //800

fmt.println(unsafe.sizeof(y)) //0

上面我遇到的問題最後是用過引入乙個方法解決的。

func (f filemeta) isempty() bool )

}

不能使用if判斷,就乾脆做乙個方法自己去判斷。 if isempty() 來得到判斷結果。

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函式,指標和例項均可以比較 無論有沒有包含不可比...