bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

go語言結構初始化 go 初始化結構體

Go語言中new和 make的區別詳解

new 主要用于結構體的初始化

創新互聯:成立與2013年為各行業開拓出企業自己的“網站建設”服務,為成百上千家公司企業提供了專業的網站制作、成都網站制作、網頁設計和網站推廣服務, 按需規劃網站由設計師親自精心設計,設計的效果完全按照客戶的要求,并適當的提出合理的建議,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據客戶的實際情況給出合理的網站構架,制作客戶同行業具有領先地位的。

make用于數組array,切片slice,協程chnnel的初始化

例如: users:=make([10]int);

msg:=make(chan int);

new會分配結構空間,并初始化為清空為零,不進一步初始化

new之后需要一個指針來指向這個結構

make會分配結構空間及其附屬空間,并完成其間的指針初始化

make返回這個結構空間,不另外分配一個指針

例子new:

var p *[]int = new([]int)

p := new([]int)

以上分配了一個slice結構,但是結構中的應該指向底層數組的ptr指針為空,故實際不能往這個slice里面存取數據

同時分配了一個指針p,也即(在32位系統中)占4個字節并存放slice結構的地址

例子make:

var v []int = make([]int, 0)

v := make([]int, 0)

以上分配了一個slice結構,且結構中的應該指向底層數組的ptr指針已經指向了某個底層數組,這個底層數組應該已經分配了,故這個slice已經可以使用了

注意v就是這個slice結構,而不是一個指向slice的指針

上述僅是示例,一般使用時都會明確長度和容量:v := make([]int, 10, 50)

結論:

由上可見,用new來分配slice的意義不大,因為沒有恰當的初始化,無法直接使用

有附帶空間的結構,使用make來初始化,可以完成內部指針初始化,其后可以立即使用

go 的選項模式

現在有個結構體如下定義:

我們需要初始化結構體,如果是其他語言,函數支持默認參數:

但是,go語言函數不支持默認參數,同時即使go語言支持默認參數,但是如果配置項過多,那么每一個配置項都得寫一個默認參數,也不現實。

那么,在go語言中,我們怎么優雅的給其初始化呢,這時,就需要利用選項模式了(option)。

首先,我們定義一個option函數類型:

它接收一個參數: *Server 。

然后定義一個 NewServer 函數,它接收一個 Option類型的不定參數:

最后,再直接定義一系列返回 Option的函數

使用時,直接:

golang 內置函數new 和struct 初始化的區別

obj := new(StructName) ?初始化Struct中的所有屬性都是零值,返回的是Struct指針,效果與StructName{}一致。

obj :=?StructName{Prop1:xx, Prop2:yy,...} ,?初始化Struct中的所有屬性,同時對指定屬性賦值,返回的是Struct值對象,作為參數傳遞時,其屬性不會被修改。

obj := StructName{Prop1:xx, Prop2:yy,...} 同上,返回的是Struct值對象的指針,作為參數傳遞時,其屬性可以被修改。

后面兩種使用方法更加靈活。

標題名稱:go語言結構初始化 go 初始化結構體
瀏覽路徑:http://vcdvsql.cn/article44/ddcsehe.html

成都網站建設公司_創新互聯,為您提供微信公眾號動態網站虛擬主機營銷型網站建設服務器托管關鍵詞優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司