golang中的變量你知道多少愉豺?

變量的定義

var a =1//編譯器會推斷變量 a的類型為int
b :=1 //短變量聲明
var c int篓吁;c=1// 變量聲明,并且賦值

變量的重聲明

短變量聲明蚪拦。通過使用它杖剪,我們可以對同一個代碼塊中的變量進行重聲明。

例子

var err error
n, err := io.WriteString(os.Stdout, "Hello\n")//使用短變量聲明對新變量n和舊變量err進行了“聲明并賦值”驰贷,這也是對后者的重聲明

變量重聲明的前提條件

  1. 由于變量的類型在其初始化時就已經(jīng)確定了盛嘿,所以對它再次聲明時賦予的類型必須與其原本
    的類型相同,否則會產(chǎn)生編譯錯誤括袒。
  2. 變量的重聲明只可能發(fā)生在某一個代碼塊中次兆。如果與當前的變量重名的是外層代碼塊中的變
    量,那么就是可重名變量了锹锰。
  3. 變量的重聲明只有在使用短變量聲明時才會發(fā)生芥炭,否則也無法通過編譯。如果要在此處聲明
    全新的變量恃慧,那么就應該使用包含關(guān)鍵字var的聲明語句园蝠,但是這時就不能與同一個代碼塊
    中的任何變量有重名了 。
  4. 被“聲明并賦值”的變量必須是多個痢士,并且其中至少有一個是新的變量垛孔。這時我們才可以說
    對其中的舊變量進行了重聲明俊抵。

可重名變量

例子:

package main

import (
    "fmt"
)

var str = "我在main外面"

func main() {
    var str = "我在main里面"
    {
        str := "我在代碼塊內(nèi)"
        fmt.Println(str)
    }
    fmt.Println(str)
}
//輸出的結(jié)果
//我在代碼塊內(nèi)
//我在main里面

變量的查找:

  • 首先,代碼引用變量的時候總會最優(yōu)先查找當前代碼塊中的那個變量。注意骤素,這里的“當前
    代碼塊”僅僅是引用變量的代碼所在的那個代碼塊烦却,并不包含任何子代碼塊酗捌。

  • 其次妈橄,如果當前代碼塊中沒有聲明以此為名的變量,那么程序會沿著代碼塊的嵌套關(guān)系赞庶,從
    直接包含當前代碼塊的那個代碼塊開始训挡,一層一層地查找。

  • 一般情況下歧强,程序會一直查到當前代碼包代表的那層代碼塊澜薄。如果仍然找不到,那么 Go 語
    言的編譯器就會報錯了摊册。

  • 如果我們把代碼包導入語句寫成import . XXX的形式肤京,那么就會讓這個“XXX”包中公開的程序?qū)嶓w被當前源碼文件中的代碼,視為當前代碼包中的程序?qū)嶓w。在查找當前源碼文件不存在后忘分,會查用這種方式導入的代碼包

重名變量與變量重聲明中的變量區(qū)別

  1. 變量重聲明中的變量一定是在某一個代碼塊內(nèi)的棋枕。注意,這里的“某一個代碼塊內(nèi)”并不包
    含它的任何子代碼塊妒峦,否則就變成了“多個代碼塊之間”重斑。而重名變量指的正是在多個代
    碼塊之間的由相同的標識符代表的變量。
  2. 變量重聲明是對同一個變量的多次聲明肯骇,這里的變量只有一個窥浪。而重名變量中涉及的變量
    肯定是有多個的。
  3. 不論對變量重聲明多少次笛丙,其類型必須始終一致漾脂,具體遵從它第一次被聲明時給定的類型。
    重名變量之間不存在類似的限制胚鸯,它們的類型可以是任意的骨稿。
  4. 如果重名變量所在的代碼塊之間存在直接或間接的嵌套關(guān)系,那么它們之間一定會存
    在“屏蔽”的現(xiàn)象姜钳。但是這種現(xiàn)象絕對不會在變量重聲明的場景下出現(xiàn)坦冠。

判斷變量的類型

語法:

/*
  類型斷言表達式的語法形式是x.(T)。其中的x代表要被判斷類型的那個值傲须。這
  個值當下的類型必須是接口類型的
*/
container := []string{"111", "222"}
// 需要將 container 轉(zhuǎn)成接口類型,才可以使用類型推斷(如果不是接口趟脂,那類型推斷又有什么必要了)
value, ok := interface{}(container).([]string
/*
ok:將代表類型判斷的結(jié)果bool類型
value:
    ok=true:被判斷的值將會被自動轉(zhuǎn)換為[]string類型的值泰讽,并賦給變量value
    ok=false:value將被賦予nil
*/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昔期,隨后出現(xiàn)的幾起案子已卸,更是在濱河造成了極大的恐慌,老刑警劉巖硼一,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件累澡,死亡現(xiàn)場離奇詭異,居然都是意外死亡般贼,警方通過查閱死者的電腦和手機愧哟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哼蛆,“玉大人蕊梧,你說我怎么就攤上這事∪椋” “怎么了肥矢?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叠洗。 經(jīng)常有香客問我甘改,道長旅东,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任十艾,我火速辦了婚禮抵代,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疟羹。我一直安慰自己主守,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布榄融。 她就那樣靜靜地躺著参淫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愧杯。 梳的紋絲不亂的頭發(fā)上涎才,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音力九,去河邊找鬼耍铜。 笑死,一個胖子當著我的面吹牛跌前,可吹牛的內(nèi)容都是我干的棕兼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼抵乓,長吁一口氣:“原來是場噩夢啊……” “哼伴挚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灾炭,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤茎芋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蜈出,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體田弥,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年铡原,在試婚紗的時候發(fā)現(xiàn)自己被綠了偷厦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡燕刻,死狀恐怖沪哺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酌儒,我是刑警寧澤辜妓,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響籍滴,放射性物質(zhì)發(fā)生泄漏酪夷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一孽惰、第九天 我趴在偏房一處隱蔽的房頂上張望晚岭。 院中可真熱鬧,春花似錦勋功、人聲如沸坦报。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽片择。三九已至,卻和暖如春骚揍,著一層夾襖步出監(jiān)牢的瞬間字管,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工信不, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘲叔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓抽活,卻偏偏與公主長得像硫戈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子下硕,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,092評論 1 32
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時丁逝,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,253評論 0 9
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評論 0 5
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用卵牍,...
    LZM輪回閱讀 3,291評論 0 6
  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,104評論 0 21