Go語(yǔ)言開發(fā)2---常量&變量的聲明和運(yùn)用

package main

import (
    "fmt"
)

/*
 * Go語(yǔ)言學(xué)習(xí):常量&變量的聲明和運(yùn)用
 *
 */

// 這種寫法一般用于全局變量,全局變量可以被僅創(chuàng)建而不使用
var (
    num    int
    str    string
    status bool
)

// 常量的定義

const NUMBER int = 1
const NUMBER2, NUMBER3, NUMBER4 = 1, false, "str"

// 常量還可以用作枚舉:
const (
    Unknown = 0
    Female  = 1
    Male    = 2
)

// iota,特殊常量,可以認(rèn)為是一個(gè)可以被編譯器修改的常量。
// 在每一個(gè)const關(guān)鍵字出現(xiàn)時(shí),被重置為0,然后再下一個(gè)const出現(xiàn)之前,每出現(xiàn)一次iota,其所代表的數(shù)字會(huì)自動(dòng)增加1。
// iota 可以被用作枚舉值:
const (
    a1 = 1              // 1
    b2 = iota           // 1 + 0
    c3                  // 1 + 1
    c4                  // 1 + 2
    c5 = 10             // 10
    a6                  // 10
    a7 = iota           // 10 + 0
    a8 = 11             // 11
    a9 = iota           //
)

func main() {

    fmt.Println(a1, b2, c3, c4, c5, a6, a7, a8, a9)

    //變量的聲明方式有以下幾種

    var name string            //聲明變量
    name = "name"              //給變量賦值
    var name2 = "name2"        //聲明后直接賦值
    var name3 string = "name3" //聲明后直接賦值

    // 簡(jiǎn)單的聲明賦值方式,但是它只能被用在函數(shù)體內(nèi),而不可以用于全局變量的聲明與賦值。
    // 使用操作符 := 可以高效地創(chuàng)建一個(gè)新的變量,稱之為初始化聲明。
    name4 := "name4"

    var a, b, c int
    var d, e, f = 1, 2, 3

    //同一變量不能被聲明多次,但可以被多次賦值

    i := 1
    //i := 2    //這個(gè)是不允許的
    i = 2 //可以被賦值多次

    /*
     *  變量的命名規(guī)則:
     *
     *  由字母、數(shù)字、下滑線組成
     *
     *  注意:首字母不能是數(shù)字,變量名不可以是 保留字/關(guān)鍵字
     *
     *  聲明的變量必須被使用,而且如果沒聲明數(shù)據(jù)類型則會(huì)自動(dòng)根據(jù)值來(lái)進(jìn)行匹配
     */

    //常量聲明完不可被修改

    const (
        num1 = 1
    )
    const num2 = 2

    fmt.Println(name)
    fmt.Println(name2)
    fmt.Println(name3)
    fmt.Println(name4)

    fmt.Println(i)

    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)

    fmt.Println(d)
    fmt.Println(e)
    fmt.Println(f)

    fmt.Println(num)
    fmt.Println(str)
    fmt.Println(status)
    fmt.Println(num1)
    fmt.Println(num2)

    name2 = name

    /**
        值類型:
        注意:所有像 int、float、bool 和 string 這些基本類型都屬于值類型,使用這些類型的變量直接指向存在內(nèi)存中的值:

        當(dāng)使用等號(hào) = 將一個(gè)變量的值賦值給另一個(gè)變量時(shí),如:j = i,實(shí)際上是在內(nèi)存中將 i 的值進(jìn)行了拷貝:

        你可以通過 &i 來(lái)獲取變量 i 的內(nèi)存地址,如下兩個(gè)內(nèi)存不是同一個(gè)地址。所以單獨(dú)修改任意一個(gè)兩個(gè)都不會(huì)有影響
     */
    fmt.Println(&name)
    fmt.Println(&name2)

    /*
        引用類型:
        一個(gè)引用類型的變量 r1 存儲(chǔ)的是 r1 的值所在的內(nèi)存地址(數(shù)字),或內(nèi)存地址中第一個(gè)字所在的位置。

        這個(gè)內(nèi)存地址為稱之為指針,這個(gè)指針實(shí)際上也被存在另外的某一個(gè)字中。
        同一個(gè)引用類型的指針指向的多個(gè)字可以是在連續(xù)的內(nèi)存地址中(內(nèi)存布局是連續(xù)的),這也是計(jì)算效率最高的一種存儲(chǔ)形式;也可以將這些字分散存放在內(nèi)存中,每個(gè)字都指示了下一個(gè)字所在的內(nèi)存地址。
        當(dāng)使用賦值語(yǔ)句 r2 = r1 時(shí),只有引用(地址)被復(fù)制。
        如果 r1 的值被改變了,那么這個(gè)值的所有引用都會(huì)指向被修改后的內(nèi)容,在這個(gè)例子中,r2 也會(huì)受到影響。
     */

    // 這樣寫可以直接交換兩個(gè)變量的值
    name3, name4 = name4, name3

    fmt.Println(name3, name4)

    /*
        并行賦值也被用于當(dāng)一個(gè)函數(shù)返回多個(gè)返回值時(shí),比如這里的 val 和錯(cuò)誤 err 是通過調(diào)用 Func1 函數(shù)同時(shí)得到:val, err = Func1(var1)。
     */
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 書是在河南讀的,業(yè)是在北京從的,吃飯的主食,自然是以面粉為主。但我發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象,這從南到北,似乎全都是米飯的...
    丫丫個(gè)菜閱讀 444評(píng)論 1 1
  • 好久,沒再用簡(jiǎn)書。好久,沒有在公共平臺(tái)上寫文字。好久,沒有像現(xiàn)在這樣,清醒著,舒適著,嚴(yán)肅地端看自己。 ...
    小秀子乖乖閱讀 358評(píng)論 0 2
  • 又是一年驚蟄, 年的美味佳肴讓挑剔的味蕾疲倦了, 年的美味佳肴讓貪心的腸胃厭惡了, 還好迎來(lái)了驚蟄的雷鳴雨水,還不...
    文案黃藥師閱讀 474評(píng)論 0 0

友情鏈接更多精彩內(nèi)容