go變量的定義-創(chuàng)新互聯(lián)

3. 變量

變量是什么

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

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都網(wǎng)站建設(shè)、連城網(wǎng)絡(luò)推廣、微信小程序、連城網(wǎng)絡(luò)營銷、連城企業(yè)策劃、連城品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供連城建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn

聲明單個(gè)變量

var name type是聲明單個(gè)變量的語法。

package main

import "fmt"

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

語句var age int聲明了一個(gè) 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)
}

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

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

聲明變量并初始化

聲明變量的同時(shí)可以給定初始值。var name type = initialvalue的語法用于聲明變量并初始化。

package main

import "fmt"

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

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

在上面的程序中,age 是具有初始值 29 的 int 類型變量。如果你運(yùn)行上面的程序,你可以看見下面的輸出,證實(shí) 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)
}

聲明多個(gè)變量

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

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

package main

import "fmt"

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

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

上述程序?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)
}

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

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

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

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)
}

這里我們聲明了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)行上面的程序,可以看到輸出為my name is naveen age is 29。

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

package main

import "fmt"

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

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

簡短聲明的語法要求:=操作符的左邊至少有一個(gè)變量是尚未聲明的??紤]下面的程序:

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)
}

在上面程序中的第 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 // 錯(cuò)誤,沒有尚未聲明的變量
}

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

變量也可以在運(yùn)行時(shí)進(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)
}

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

minimum value is  145.8

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

package main

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

使用 := 注意以下幾點(diǎn):

  • 同一個(gè)代碼塊內(nèi)不能多次聲明同一個(gè)變量
  • 函數(shù)內(nèi)部可以使用全局定義的變量,意思是給變量賦予一個(gè)新得值
  • 函數(shù)體內(nèi)屬于獨(dú)立得代碼塊,可以再次聲明變量a,可以改變變量得類型,并且只在函數(shù)內(nèi)部生效
  • 如果在定義變量之前就調(diào)用該變量,那么會編譯錯(cuò)誤,返回undefined:a
  • 全局定義部限制位置,但建議統(tǒng)一放在函數(shù)代碼前面

當(dāng)變量被聲明但沒有賦值時(shí),它得值就是定義時(shí)制定類型得零值,例如 int 為 0, float為0.0,bool為 false, string為空字符串,指針為nil等

通過OS來設(shè)置環(huán)境變量

package main

import (
    "fmt"
    "os"
)

var (

    NAME = os.Setenv("NAME", "name")   // 設(shè)置環(huán)境變量
)

func main(){
    fmt.Println(os.Getenv("NAME"))  // 獲取環(huán)境變量
    user := os.Getenv("USER")
    // user為空, 因?yàn)樵诃h(huán)境變量中沒有這個(gè)變量
    fmt.Println(user)
    fmt.Printf("%T", user)

//  以下是運(yùn)行結(jié)果
//  name
//
//  string

}

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

名稱欄目:go變量的定義-創(chuàng)新互聯(lián)
文章來源:http://muchs.cn/article22/degsjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站服務(wù)器托管、網(wǎng)站收錄、品牌網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)