日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GO教程:Go語言實例化結(jié)構(gòu)體——為結(jié)構(gòu)體分配內(nèi)存并初始化

結(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