新聞中心
結(jié)構(gòu)體的定義只是一種內(nèi)存布局的描述,只有當結(jié)構(gòu)體實例化時,才會真正地分配內(nèi)存,因此必須在定義結(jié)構(gòu)體并實例化后才能使用結(jié)構(gòu)體的字段。

創(chuàng)新互聯(lián)公司服務項目包括陳倉網(wǎng)站建設、陳倉網(wǎng)站制作、陳倉網(wǎng)頁制作以及陳倉網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,陳倉網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到陳倉省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
實例化就是根據(jù)結(jié)構(gòu)體定義的格式創(chuàng)建一份與格式一致的內(nèi)存區(qū)域,結(jié)構(gòu)體實例與實例間的內(nèi)存是完全獨立的。
Go語言可以通過多種方式實例化結(jié)構(gòu)體,根據(jù)實際需要可以選用不同的寫法。
基本的實例化形式
結(jié)構(gòu)體本身是一種類型,可以像整型、字符串等類型一樣,以 var 的方式聲明結(jié)構(gòu)體即可完成實例化。
基本實例化格式如下:
var ins T
其中,T 為結(jié)構(gòu)體類型,ins 為結(jié)構(gòu)體的實例。
用結(jié)構(gòu)體表示的點結(jié)構(gòu)(Point)的實例化過程請參見下面的代碼:
type Point struct {
X int
Y int
}
var p Point
p.X = 10
p.Y = 20 在例子中,使用.來訪問結(jié)構(gòu)體的成員變量,如 p.X 和 p.Y 等,結(jié)構(gòu)體成員變量的賦值方法與普通變量一致。
創(chuàng)建指針類型的結(jié)構(gòu)體
Go語言中,還可以使用 new 關鍵字對類型(包括結(jié)構(gòu)體、整型、浮點數(shù)、字符串等)進行實例化,結(jié)構(gòu)體在實例化后會形成指針類型的結(jié)構(gòu)體。
使用 new 的格式如下:
ins := new(T)
其中:
- T 為類型,可以是結(jié)構(gòu)體、整型、字符串等。
- ins:T 類型被實例化后保存到 ins 變量中,ins 的類型為 *T,屬于指針。
Go語言讓我們可以像訪問普通結(jié)構(gòu)體一樣使用.來訪問結(jié)構(gòu)體指針的成員。
下面的例子定義了一個玩家(Player)的結(jié)構(gòu),玩家擁有名字、生命值和魔法值,實例化玩家(Player)結(jié)構(gòu)體后,可對成員進行賦值,代碼如下:
type Player struct{
Name string
HealthPoint int
MagicPoint int
}
tank := new(Player)
tank.Name = "Canon"
tank.HealthPoint = 300經(jīng)過 new 實例化的結(jié)構(gòu)體實例在成員賦值上與基本實例化的寫法一致。
Go語言和 C/C++
在 C/C++ 語言中,使用 new 實例化類型后,訪問其成員變量時必須使用->操作符。
在Go語言中,訪問結(jié)構(gòu)體指針的成員變量時可以繼續(xù)使用.,這是因為Go語言為了方便開發(fā)者訪問結(jié)構(gòu)體指針的成員變量,使用了語法糖(Syntactic sugar)技術(shù),將 ins.Name 形式轉(zhuǎn)換為 (*ins).Name。
取結(jié)構(gòu)體的地址實例化
在Go語言中,對結(jié)構(gòu)體進行&取地址操作時,視為對該類型進行一次 new 的實例化操作,取地址格式如下:
ins := &T{}
其中:
- T 表示結(jié)構(gòu)體類型。
- ins 為結(jié)構(gòu)體的實例,類型為 *T,是指針類型。
下面使用結(jié)構(gòu)體定義一個命令行指令(Command),指令中包含名稱、變量關聯(lián)和注釋等,對 Command 進行指針地址的實例化,并完成賦值過程,代碼如下:
type Command struct {
Name string // 指令名稱
Var *int // 指令綁定的變量
Comment string // 指令的注釋
}
var version int = 1
cmd := &Command{}
cmd.Name = "version"
cmd.Var = &version
cmd.Comment = "show version"代碼說明如下:
- 第 1 行,定義 Command 結(jié)構(gòu)體,表示命令行指令
- 第 3 行,命令綁定的變量,使用整型指針綁定一個指針,指令的值可以與綁定的值隨時保持同步。
- 第 7 行,命令綁定的目標整型變量:版本號。
- 第 9 行,對結(jié)構(gòu)體取地址實例化。
- 第 10~12 行,初始化成員字段。
取地址實例化是最廣泛的一種結(jié)構(gòu)體實例化方式,可以使用函數(shù)封裝上面的初始化過程,代碼如下:
func newCommand(name string, varref *int, comment string) *Command {
return &Command{
Name: name,
Var: varref,
Comment: comment,
}
}
cmd = newCommand(
"version",
&version,
"show version",
) 本文名稱:創(chuàng)新互聯(lián)GO教程:Go語言實例化結(jié)構(gòu)體——為結(jié)構(gòu)體分配內(nèi)存并初始化
本文鏈接:http://m.5511xx.com/article/cdjscoi.html


咨詢
建站咨詢
