<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go 經(jīng)典入門系列 3:變量

          共 5459字,需瀏覽 11分鐘

           ·

          2020-12-01 16:43

          點擊上方藍(lán)色“Go語言中文網(wǎng)”關(guān)注,每天一起學(xué) Go

          這是我們 Golang 系列教程的第 3 個教程,探討 Golang 里的變量(Variables)。

          你可以閱讀 Golang 系列教程第 2 部分:Hello World,學(xué)習(xí)如何配置 Golang,并運(yùn)行 hello world 程序。

          變量是什么

          變量指定了某存儲單元(Memory Location)的名稱,該存儲單元會存儲特定類型的值。在 Go 中,有多種語法用于聲明變量。

          聲明單個變量

          var name type 是聲明單個變量的語法。

          package?main

          import?"fmt"

          func?main()?{
          ????var?age?int?//?變量聲明
          ????fmt.Println("my?age?is",?age)
          }

          在線運(yùn)行程序[1]

          語句 var age int 聲明了一個 int 類型的變量,名字為 age。我們還沒有給該變量賦值。如果變量未被賦值,Go 會自動地將其初始化,賦值該變量類型的零值(Zero Value)。本例中 age 就被賦值為 0。如果你運(yùn)行該程序,你會看到如下輸出:

          my?age?is?0

          變量可以賦值為本類型的任何值。上一程序中的 age 可以賦值為任何整型值(Integer Value)。

          package?main

          import?"fmt"

          func?main()?{
          ????var?age?int?//?變量聲明
          ????fmt.Println("my?age?is",?age)
          ????age?=?29?//?賦值
          ????fmt.Println("my?age?is",?age)
          ????age?=?54?//?賦值
          ????fmt.Println("my?new?age?is",?age)
          }

          在線運(yùn)行程序[2]

          上面的程序會有如下輸出:

          my?age?is??0
          my?age?is?29
          my?new?age?is?54

          聲明變量并初始化

          聲明變量的同時可以給定初始值。

          var name type = initialvalue 的語法用于聲明變量并初始化。

          package?main

          import?"fmt"

          func?main()?{
          ????var?age?int?=?29?//?聲明變量并初始化

          ????fmt.Println("my?age?is",?age)
          }

          在線運(yùn)行程序[3]

          在上面的程序中,age 是具有初始值 29 的 int 類型變量。如果你運(yùn)行上面的程序,你可以看見下面的輸出,證實 age 已經(jīng)被初始化為 29。

          my?age?is?29

          類型推斷(Type Inference)

          如果變量有初始值,那么 Go 能夠自動推斷具有初始值的變量的類型。因此,如果變量有初始值,就可以在變量聲明中省略 type

          如果變量聲明的語法是 var name = initialvalue,Go 能夠根據(jù)初始值自動推斷變量的類型。

          在下面的例子中,你可以看到在第 6 行,我們省略了變量 ageint 類型,Go 依然推斷出了它是 int 類型。

          package?main

          import?"fmt"

          func?main()?{
          ????var?age?=?29?//?可以推斷類型

          ????fmt.Println("my?age?is",?age)
          }

          在線運(yùn)行程序[4]

          聲明多個變量

          Go 能夠通過一條語句聲明多個變量。

          聲明多個變量的語法是 var name1, name2 type = initialvalue1, initialvalue2

          package?main

          import?"fmt"

          func?main()?{
          ????var?width,?height?int?=?100,?50?//?聲明多個變量

          ????fmt.Println("width?is",?width,?"height?is",?heigh)
          }

          在線運(yùn)行程序[5]

          上述程序?qū)⒃跇?biāo)準(zhǔn)輸出打印 width is 100 height is 50

          你可能已經(jīng)想到,如果 width 和 height 省略了初始化,它們的初始值將賦值為 0。

          package?main

          import?"fmt"

          func?main()?{
          ????var?width,?height?int
          ????fmt.Println("width?is",?width,?"height?is",?height)
          ????width?=?100
          ????height?=?50
          ????fmt.Println("new?width?is",?width,?"new?height?is?",?height)
          }

          在線運(yùn)行程序[6]

          上面的程序?qū)蛴。?/p>

          width?is?0?height?is?0
          new?width?is?100?new?height?is??50

          在有些情況下,我們可能會想要在一個語句中聲明不同類型的變量。其語法如下:

          var?(
          ????name1?=?initialvalue1,
          ????name2?=?initialvalue2
          )

          使用上述語法,下面的程序聲明不同類型的變量。

          package?main

          import?"fmt"

          func?main()?{
          ????var?(
          ????????name???=?"naveen"
          ????????age????=?29
          ????????height?int
          ????)
          ????fmt.Println("my?name?is",?name,?",?age?is",?age,?"and?height?is",?height)
          }

          在線運(yùn)行程序[7]

          這里我們聲明了 string 類型的 name、int 類型的 age 和 height(我們將會在下一教程中討論 golang 所支持的變量類型)。運(yùn)行上面的程序會產(chǎn)生輸出 my name is naveen , age is 29 and height is 0

          簡短聲明

          Go 也支持一種聲明變量的簡潔形式,稱為簡短聲明(Short Hand Declaration),該聲明使用了 := 操作符。

          聲明變量的簡短語法是 name := initialvalue

          package?main

          import?"fmt"

          func?main()?{
          ????name,?age?:=?"naveen",?29?//?簡短聲明

          ????fmt.Println("my?name?is",?name,?"age?is",?age)
          }

          在線運(yùn)行程序[8]

          運(yùn)行上面的程序,可以看到輸出為 my name is naveen age is 29

          簡短聲明要求 := 操作符左邊的所有變量都有初始值。下面程序?qū)伋鲥e誤 cannot assign 1 values to 2 variables,這是因為 age 沒有被賦值

          package?main

          import?"fmt"

          func?main()?{
          ????name,?age?:=?"naveen"?//error

          ????fmt.Println("my?name?is",?name,?"age?is",?age)
          }

          在線運(yùn)行程序[9]

          簡短聲明的語法要求 := 操作符的左邊至少有一個變量是尚未聲明的。考慮下面的程序:

          package?main

          import?"fmt"

          func?main()?{
          ????a,?b?:=?20,?30?//?聲明變量a和b
          ????fmt.Println("a?is",?a,?"b?is",?b)
          ????b,?c?:=?40,?50?//?b已經(jīng)聲明,但c尚未聲明
          ????fmt.Println("b?is",?b,?"c?is",?c)
          ????b,?c?=?80,?90?//?給已經(jīng)聲明的變量b和c賦新值
          ????fmt.Println("changed?b?is",?b,?"c?is",?c)
          }

          在線運(yùn)行程序[10]

          在上面程序中的第 8 行,由于 b 已經(jīng)被聲明,而 c 尚未聲明,因此運(yùn)行成功并且輸出:

          a?is?20?b?is?30
          b?is?40?c?is?50
          changed?b?is?80?c?is?90

          但是如果我們運(yùn)行下面的程序:

          package?main

          import?"fmt"

          func?main()?{
          ????a,?b?:=?20,?30?//?聲明a和b
          ????fmt.Println("a?is",?a,?"b?is",?b)
          ????a,?b?:=?40,?50?//?錯誤,沒有尚未聲明的變量
          }

          在線運(yùn)行程序[11]

          上面運(yùn)行后會拋出 no new variables on left side of := 的錯誤,這是因為 a 和 b 的變量已經(jīng)聲明過了,:= 的左邊并沒有尚未聲明的變量。

          變量也可以在運(yùn)行時進(jìn)行賦值。考慮下面的程序:

          package?main

          import?(
          ????"fmt"
          ????"math"
          )

          func?main()?{
          ????a,?b?:=?145.8,?543.8
          ????c?:=?math.Min(a,?b)
          ????fmt.Println("minimum?value?is?",?c)
          }

          在線運(yùn)行程序[12]

          在上面的程序中,c 的值是運(yùn)行過程中計算得到的,即 a 和 b 的最小值。上述程序會打印:

          minimum?value?is??145.8

          由于 Go 是強(qiáng)類型(Strongly Typed)語言,因此不允許某一類型的變量賦值為其他類型的值。下面的程序會拋出錯誤 cannot use "naveen" (type string) as type int in assignment,這是因為 age 本來聲明為 int 類型,而我們卻嘗試給它賦字符串類型的值。

          package?main

          func?main()?{
          ????age?:=?29??????//?age是int類型
          ????age?=?"naveen"?//?錯誤,嘗試賦值一個字符串給int類型變量
          }

          在線運(yùn)行程序[13]

          感謝您的閱讀,請在評論欄上面發(fā)布您的問題和反饋。

          上一教程 - Hello World[14]

          下一教程 - 類型[15]


          via: https://golangbot.com/variables/

          作者:Nick Coghlan[16]譯者:Noluye[17]校對:Unknwon[18]

          本文由 GCTT[19] 原創(chuàng)編譯,Go 中文網(wǎng)[20] 榮譽(yù)推出

          參考資料

          [1]

          在線運(yùn)行程序: https://play.golang.org/p/XrveIxw_YI

          [2]

          在線運(yùn)行程序: https://play.golang.org/p/z4nKMjBxLx

          [3]

          在線運(yùn)行程序: https://play.golang.org/p/TFfpzsrchh

          [4]

          在線運(yùn)行程序: https://play.golang.org/p/FgNbfL3WIt

          [5]

          在線運(yùn)行程序: https://play.golang.org/p/4aOQyt55ah

          [6]

          在線運(yùn)行程序: https://play.golang.org/p/DM00pcBbsu

          [7]

          在線運(yùn)行程序: https://play.golang.org/p/7pkp74h_9L

          [8]

          在線運(yùn)行程序: https://play.golang.org/p/ctqgw4w6kx

          [9]

          在線運(yùn)行程序: https://play.golang.org/p/wZd2HmDvqw

          [10]

          在線運(yùn)行程序: https://play.golang.org/p/MSUYR8vazB

          [11]

          在線運(yùn)行程序: https://play.golang.org/p/EYTtRnlDu3

          [12]

          在線運(yùn)行程序: https://play.golang.org/p/7XojAtrpH9

          [13]

          在線運(yùn)行程序: https://play.golang.org/p/K5rz4gxjPj

          [14]

          Hello World: https://studygolang.com/articles/11755

          [15]

          類型: https://studygolang.com/articles/11869

          [16]

          Nick Coghlan: https://golangbot.com/about/

          [17]

          Noluye: https://github.com/Noluye

          [18]

          Unknwon: https://github.com/Unknwon

          [19]

          GCTT: https://github.com/studygolang/GCTT

          [20]

          Go 中文網(wǎng): https://studygolang.com/



          推薦閱讀


          福利

          我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號 「polarisxu」,回復(fù) ebook 獲取;還可以回復(fù)「進(jìn)群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。

          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91无码一区二区三区在线 | 一区大宝贝 | 国产抠逼视频 | 日韩欧美黄色电影 | 国产成人在线综合豆花 |