go語言結(jié)構(gòu)初始化 go 初始化結(jié)構(gòu)體

Go語言中new和 make的區(qū)別詳解

new 主要用于結(jié)構(gòu)體的初始化

創(chuàng)新互聯(lián):成立與2013年為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為成百上千家公司企業(yè)提供了專業(yè)的網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)頁設(shè)計和網(wǎng)站推廣服務(wù), 按需規(guī)劃網(wǎng)站由設(shè)計師親自精心設(shè)計,設(shè)計的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。

make用于數(shù)組array,切片slice,協(xié)程chnnel的初始化

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

msg:=make(chan int);

new會分配結(jié)構(gòu)空間,并初始化為清空為零,不進一步初始化

new之后需要一個指針來指向這個結(jié)構(gòu)

make會分配結(jié)構(gòu)空間及其附屬空間,并完成其間的指針初始化

make返回這個結(jié)構(gòu)空間,不另外分配一個指針

例子new:

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

p := new([]int)

以上分配了一個slice結(jié)構(gòu),但是結(jié)構(gòu)中的應(yīng)該指向底層數(shù)組的ptr指針為空,故實際不能往這個slice里面存取數(shù)據(jù)

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

例子make:

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

v := make([]int, 0)

以上分配了一個slice結(jié)構(gòu),且結(jié)構(gòu)中的應(yīng)該指向底層數(shù)組的ptr指針已經(jīng)指向了某個底層數(shù)組,這個底層數(shù)組應(yīng)該已經(jīng)分配了,故這個slice已經(jīng)可以使用了

注意v就是這個slice結(jié)構(gòu),而不是一個指向slice的指針

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

結(jié)論:

由上可見,用new來分配slice的意義不大,因為沒有恰當(dāng)?shù)某跏蓟?,無法直接使用

有附帶空間的結(jié)構(gòu),使用make來初始化,可以完成內(nèi)部指針初始化,其后可以立即使用

go 的選項模式

現(xiàn)在有個結(jié)構(gòu)體如下定義:

我們需要初始化結(jié)構(gòu)體,如果是其他語言,函數(shù)支持默認參數(shù):

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

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

首先,我們定義一個option函數(shù)類型:

它接收一個參數(shù): *Server 。

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

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

使用時,直接:

golang 內(nèi)置函數(shù)new 和struct 初始化的區(qū)別

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

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

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

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

標(biāo)題名稱:go語言結(jié)構(gòu)初始化 go 初始化結(jié)構(gòu)體
瀏覽路徑:http://bm7419.com/article44/ddcsehe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號動態(tài)網(wǎng)站、虛擬主機、營銷型網(wǎng)站建設(shè)、服務(wù)器托管、關(guān)鍵詞優(yōu)化

廣告

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

成都app開發(fā)公司