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

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

自訂一個結構體


type Rect struct {

    x, y float64

    width, height float64

}

初始化方法:



rect1 := new(Rect)

rect2 := &Rect{}

rect3 := &Rect{0, 0, 100, 200}

rect4 := &Rect{width:100, height:200}

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


a := Rect{}

則表示這個是一個Rect{}類型.兩者是不一樣的.參考代碼:


func main() {

rect1 := &Rect{0, 0, 100, 200}

rect1.x = 10

 

a := Rect{}

a.x = 15

 

fmt.Printf("%v\n%T\n", a, a)

fmt.Printf("%v\n%T\n", rect1, rect1)

}

運行結果為:


{15 0 0 0}

 main.Rect

 &{10 0 100 200}

 *main.Rect

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


在Go語言中,未進行初始化的變數都會被初始化為該類型的零值,例如bool類型的零值為false, int類型的零值為0, string類型的零值為空白字串. 在Go語言中沒有建構函式的概念,對象的建立通常交由一個全域的建立函數來完成,以NewXXX來命令,表示"建構函式":


func NewRect(x ,y ,width, height float64) {

    return &Rect{x, y, width, height}

}

這一切非常自然.開發人員也不需要分析在使用了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獲得特定的指標。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.