av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

創(chuàng)新互聯(lián)GO教程:Go語言變量的初始化

正如上一節(jié)《 Go語言變量聲明》中提到的 Go語言在聲明變量時(shí),自動(dòng)對(duì)變量對(duì)應(yīng)的內(nèi)存區(qū)域進(jìn)行初始化操作。每個(gè)變量會(huì)初始化其類型的默認(rèn)值,例如:

海興ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

  • 整型和浮點(diǎn)型變量的默認(rèn)值為 0 和 0.0。
  • 字符串變量的默認(rèn)值為空字符串。
  • 布爾型變量默認(rèn)為 bool。
  • 切片、函數(shù)、指針變量的默認(rèn)為 nil。

當(dāng)然,依然可以在變量聲明時(shí)賦予變量一個(gè)初始值。

回顧C(jī)語言

在C語言中,變量在聲明時(shí),并不會(huì)對(duì)變量對(duì)應(yīng)內(nèi)存區(qū)域進(jìn)行清理操作。此時(shí),變量值可能是完全不可預(yù)期的結(jié)果。開發(fā)者需要習(xí)慣在使用C語言進(jìn)行聲明時(shí)要初始化操作,稍有不慎,就會(huì)造成不可預(yù)知的后果。

在網(wǎng)絡(luò)上只有程序員才能看懂的“燙燙燙”和“屯屯屯”的梗,就來源于 C/ C++ 中變量默認(rèn)不初始化。

微軟的 VC 編譯器會(huì)將未初始化的??臻g以 16 進(jìn)制的 0xCC 填充,而未初始化的堆空間使用 0xCD 填充,而 0xCCCC 和 0xCDCD 在中文的 GB2312 編碼中剛好對(duì)應(yīng)“燙”和“屯”字。

因此,如果一個(gè)字符串沒有結(jié)束符
\0,直接輸出的內(nèi)存數(shù)據(jù)轉(zhuǎn)換為字符串就剛好對(duì)應(yīng)“燙燙燙”和“屯屯屯”。

變量初始化的標(biāo)準(zhǔn)格式

var 變量名 類型 = 表達(dá)式

例如,游戲中,玩家的血量初始值為100。可以這樣寫:

var hp int = 100

這句代碼中,hp 為變量名,類型為 int,hp 的初始值為 100。

上面代碼中,100 和 int 同為 int 類型,int 可以認(rèn)為是冗余信息,因此可以進(jìn)一步簡(jiǎn)化初始化的寫法。

編譯器推導(dǎo)類型的格式

在標(biāo)準(zhǔn)格式的基礎(chǔ)上,將 int 省略后,編譯器會(huì)嘗試根據(jù)等號(hào)右邊的表達(dá)式推導(dǎo) hp 變量的類型。

var hp = 100

等號(hào)右邊的部分在編譯原理里被稱做
右值(rvalue)。

下面是編譯器根據(jù)右值推導(dǎo)變量類型完成初始化的例子。

var attack = 40
var defence = 20
var damageRate float32 = 0.17
var damage = float32(attack-defence) * damageRate
fmt.Println(damage)

代碼說明如下:

  • 第 1 和 2 行,右值為整型,attack 和 defence 變量的類型為 int。
  • 第 3 行,表達(dá)式的右值中使用了 0.17。由于Go語言和C語言一樣,編譯器會(huì)盡量提高精確度,以避免計(jì)算中的精度損失。所以這里如果不指定 damageRate 變量的類型,Go語言編譯器會(huì)將 damageRate 類型推導(dǎo)為 float64,我們這里不需要 float64 的精度,所以需要強(qiáng)制指定類型為 float32。
  • 第 4 行,將 attack 和 defence 相減后的數(shù)值結(jié)果依然為整型,使用 float32() 將結(jié)果轉(zhuǎn)換為 float32 類型,再與 float32 類型的 damageRate 相乘后,damage 類型也是 float32 類型。

    提示:damage 變量的右值是一個(gè)復(fù)雜的表達(dá)式,整個(gè)過程既有 attack 和 defence 的運(yùn)算還有強(qiáng)制類型轉(zhuǎn)換。強(qiáng)制類型轉(zhuǎn)換會(huì)在后面的章節(jié)中介紹。

  • 第 5 行,輸出 damage 的值。

以上代碼輸出結(jié)果為:

3.4

短變量聲明并初始化

var 的變量聲明還有一種更為精簡(jiǎn)的寫法,例如:

hp := 100

這是Go語言的推導(dǎo)聲明寫法,編譯器會(huì)自動(dòng)根據(jù)右值類型推斷出左值的對(duì)應(yīng)類型。

注意:由于使用了:=,而不是賦值的=,因此推導(dǎo)聲明寫法的左值變量必須是沒有定義過的變量。若定義過,將會(huì)發(fā)生編譯錯(cuò)誤。

如果 hp 已經(jīng)被聲明過,但依然使用
:=時(shí)編譯器會(huì)報(bào)錯(cuò),代碼如下:

// 聲明 hp 變量
var hp int
// 再次聲明并賦值
hp := 10

編譯報(bào)錯(cuò)如下:

no new variables on left side of :=

意思是,在“:=”的左邊沒有新變量出現(xiàn),意思就是“:=”的左邊變量已經(jīng)被聲明了。

短變量聲明的形式在開發(fā)中的例子較多,比如:

conn, err := net.Dial("tcp","127.0.0.1:8080")

net.Dial 提供按指定協(xié)議和地址發(fā)起網(wǎng)絡(luò)連接,這個(gè)函數(shù)有兩個(gè)返回值,一個(gè)是連接對(duì)象(conn),一個(gè)是錯(cuò)誤對(duì)象(err)。如果是標(biāo)準(zhǔn)格式將會(huì)變成:

var conn net.Conn
var err error
conn, err = net.Dial("tcp", "127.0.0.1:8080")

因此,短變量聲明并初始化的格式在開發(fā)中使用比較普遍。

注意:在多個(gè)短變量聲明和賦值中,至少有一個(gè)新聲明的變量出現(xiàn)在左值中,即便其他變量名可能是重復(fù)聲明的,編譯器也不會(huì)報(bào)錯(cuò),代碼如下:

conn, err := net.Dial("tcp", "127.0.0.1:8080")
conn2, err := net.Dial("tcp", "127.0.0.1:8080")

上面的代碼片段,編譯器不會(huì)報(bào) err 重復(fù)定義。


分享名稱:創(chuàng)新互聯(lián)GO教程:Go語言變量的初始化
當(dāng)前路徑:http://uogjgqi.cn/article/cccjjgo.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流