golang中結構體的初始化方法 new方法

2021-07-22 20:00:36 字數 1087 閱讀 6776

**:

自定義乙個結構體

type rect struct

rect3 := &rect

rect4 := &rect

注意這幾個變數全部為指向rect結構的指標(指標變數),因為使用了new()函式和&操作符.而如果使用方法

a := rect{}

func main()

rect1.x = 10

a := rect{}

a.x = 15

fmt.printf("%v\n%t\n", a, a)

fmt.printf("%v\n%t\n", rect1, rect1)

執行結果為:

main.rect

&*main.rect

從結果中可以清楚的看到兩者的不同.

在go語言中,未進行初始化的變數都會被初始化為該型別的零值,例如bool型別的零值為false, int型別的零值為0, string型別的零值為空字串. 在go語言中沒有建構函式的概念,物件的建立通常交由乙個全域性的建立函式來完成,以new***來命令,表示"建構函式":

func newrect(x ,y ,width, height float64) *rect

這一切非常自然.開發者也不需要分析在使用了new之後到底背後發生了多少事情.在go語言中,一切要發生的事情都直接可以看到. 附:

用 new 分配記憶體 內建函式 new 本質上說跟其他語言中的同名函式功能一樣:new(t) 分配了零值填充的 t 型別的記憶體空間,並且返回其位址,乙個 *t 型別的值。用 go 的術語說,它返回了乙個指標,指向新分配的型別 t 的零值。記住這點非常重要。 這意味著使用者可以用 new 建立乙個資料結構的例項並且可以直接工作。如 bytes.buffer的文件所述 「buffer 的零值是乙個準備好了的空緩衝。」 類似的,sync.mutex 也沒有明確的建構函式或 init 方法。取而代之,sync.mutex 的零值被定義為非鎖定的互斥量。 零值是非常有用的。例如這樣的型別定義,56 頁的」定義自己的型別」 內容。 ***************====

務必記得 make 僅適用於 map,slice 和 channel,並且返回的不是指標。應當用 new獲得特定的指標。

Golang優雅初始化結構體

所謂優雅,即能夠讓擴充套件性更好,便於在後期擴充套件的時候,減少開發時間,以及更加易於新增功能。具體的實現,就是一次對於閉包的靈活使用 閱go micro 從示例 main.go service.go options.go的實現來說明。main.go package main func main s...

結構體初始化 指定初始化

參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...

結構體初始化

結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...