Go語(yǔ)言編程(二)順序編程

變量

  1. 聲明

    var v1 int //變量
    var v3 [10]int //數(shù)組
    var v5 *int //指針
    var ( //組合定義
        v7 int
        v9 string
    )
    
  2. 初始化
    定義有三種方式

    var v1 int = 1
    var v1 = 1  //正確
    v1 := 1 //正確,編譯器自動(dòng)推導(dǎo)出類型
    

    雖然不用指定類型腺占,是因?yàn)榫幾g器承擔(dān)了這部分的工作颈娜。但是Go并不是動(dòng)態(tài)類型語(yǔ)言绞吁,而是強(qiáng)類型語(yǔ)言(靜態(tài)類型語(yǔ)言)

  3. 賦值
    初始化和賦值是兩個(gè)概念宾濒。Go語(yǔ)言支持多重賦值尊残,如i仗嗦,j = j,i實(shí)現(xiàn)變量值的交換。

  4. 匿名變量
    使用多個(gè)返回值和匿名變量結(jié)合代碼更加優(yōu)雅
    如fun1函數(shù)有三個(gè)返回值

        func fun1() (ret1,ret2,ret3){
            return 1,2,3
        }
    

    如果只需要ret3,可以如下編寫_,_,ret := fun1()

常量

  1. 常量的定義

    const Pi float64 = 3.14159265358
    const mask = 1 << 3 //左移三位昌妹。常量的賦值是一個(gè)編譯期的行為捶枢,因此可以賦值為一個(gè)編譯期運(yùn)算的常量表達(dá)式
    // 但是不能定義為運(yùn)行期才能得到的表達(dá)式
    
  2. 預(yù)定義的常量
    Go語(yǔ)言預(yù)定義的常量包括: true ,false, itoa

    itoa 是一個(gè)自增常量握截,const關(guān)鍵字出現(xiàn)的時(shí)候被初始化為0,之后再遇到const烂叔,自增1

    const (
        c0 = itoa //0
        c1 = itoa //1
        a = 1 << itoa //2
    )
    
  3. 枚舉類型
    GO語(yǔ)言不支持enum關(guān)鍵字谨胞。

    //注意,Go公有訪問的屬性长已,變量畜眨,大寫字母開頭; 私有的以小寫字母開頭术瓮。
    
  4. 類型
    內(nèi)置的類型有:

    • 布爾類型,bool
    • 整型: int8,byte,int16,int,unit,unitptr等
    • 浮點(diǎn)類型: float32 float64
    • 復(fù)數(shù)類型: complex64 complex128
    • 字符串 string
    • 字符 :有兩種,byte一種贰健,另:unicode字符rune
    • 錯(cuò)誤類型 error

    還有復(fù)合類型:

    ? 指針(pointer)
    ? 數(shù)組(array) //需要注意再go語(yǔ)言中胞四,數(shù)組是值類型,即作為函數(shù)參數(shù)的時(shí)候伶椿,是復(fù)制傳值而不是傳址
    ? 切片(slice) //數(shù)組是值類型辜伟,定義之后無(wú)法修改,因此需要用切片
    ? 字典(map)
    ? 通道(chan)
    ? 結(jié)構(gòu)體(struct)
    ? 接口(interface)
    
  5. 數(shù)組切片
    主要有兩種脊另,一種基于現(xiàn)有數(shù)組的切片,一種直接創(chuàng)建切片

    • 基于數(shù)組的切片
    package main
    
    import "fmt"
    
    func main() {
        var myArray [10]int = [10]int{1,2,3,4,5,6,7,8,9,10}
        //基于數(shù)組創(chuàng)建一個(gè)切片
        var mySlice []int = myArray[:5] //前五個(gè)元素导狡,使用格式myArray[first:last]
        
        <fmt class="Println">`</fmt>("Elementary of myArray:")
        for _,v := range myArray{
            fmt.Print(v," ")
        }
        fmt.Println("\nElementary of mySlice:")
        for _,v := range mySlice{
            fmt.Print(v," ")
        }
        fmt.p
    }
    
    

    運(yùn)行結(jié)果:

    Elementary of myArray:
    1 2 3 4 5 6 7 8 9 10 
    Elementary of mySlice:
    1 2 3 4 5 
    
    • 直接創(chuàng)建切片

      1. mySlice1 := make([]int, 5) //創(chuàng)建個(gè)數(shù)為5的數(shù)組切片,并初始化為0
      2. mySlice2 := make([]int, 5, 10) //創(chuàng)建元素個(gè)數(shù)為5的數(shù)組切片偎痛,并初始化為0旱捧,還要預(yù)留10個(gè)元素的存儲(chǔ)空間
      3. myslice3 := []int{1,2,3,4,5} //創(chuàng)建并初始化
    • 元素遍歷

      for i, v := range myslice {}, range表達(dá)式有兩個(gè)返回值,第一個(gè)是索引踩麦,第二個(gè)是元素的值

    • 動(dòng)態(tài)增減元素

      與數(shù)組相比枚赡,數(shù)組切片多了一個(gè)存儲(chǔ)能力的概念,元素個(gè)數(shù)和分配的空間可以是兩個(gè)不同的值谓谦,合理設(shè)置存儲(chǔ)能力贫橙,可以大幅降低數(shù)組切片增加時(shí)內(nèi)存操作的頻率,從而提高程序性能反粥。

      如果定義的數(shù)組切片存儲(chǔ)能力過(guò)小卢肃,在超出的時(shí)候,內(nèi)存需要重新分配一塊較大的內(nèi)存才顿,并把原先的內(nèi)存卡賦值過(guò)來(lái)莫湘,開銷較大

    • 基于數(shù)組切片創(chuàng)建數(shù)組切片

      oldSlice := []int(1,2,3,4,5)
      newSlice := oldSlice[:3] //取前三個(gè)。
      
    • 內(nèi)容復(fù)制

      copy(slice2, slice1) //slice1復(fù)制到slice2,長(zhǎng)度限制
      
  6. map
    在其他的語(yǔ)言中娜膘,map需要引入其他庫(kù)逊脯,沒有作為內(nèi)置類型。Golang中有

    var person map[int]  string //聲明
    //  變量名      鍵類型   值類型
    person = make(map[int]string) //創(chuàng)建
    person[1] = "John" //賦值
    name, ok := person[2] //查詢
    //值竣贪,查詢結(jié)果
    delete(person, 1) //刪除
    

流程控制

流程控制一般有四種军洼,條件語(yǔ)句巩螃,循環(huán)語(yǔ)句,選擇語(yǔ)句匕争,跳轉(zhuǎn)語(yǔ)句避乏。跳轉(zhuǎn)還比較少。
  1. 條件語(yǔ)句

    if a < 5 { //條件不用括號(hào)包圍
        return 0
    } else { //花括號(hào)必須有且只能在這里
        return 1
    }
    
  2. 選擇語(yǔ)句

    switch i { //可以不指定變量甘桑,可以留空這里
        case 0:
            fmt.Println(0)
        case 1:
            fmt.Println(1)
        default:
            fmt.Printf("default")
    }
    
  3. 循環(huán)語(yǔ)句
    GO語(yǔ)言中拍皮,只支持for語(yǔ)句的循環(huán),沒有when和while

    sum := 0
    for i:=0; i < 10; i++{
        sum += i;
    }
    //或者
    sum := 0
    i := 0
    for {
        sum += i++
        if i > 10{
            break
        }
    }
    
  4. 跳轉(zhuǎn)語(yǔ)句

goto語(yǔ)句被很多人看做不合時(shí)宜跑杭,如再c語(yǔ)言老師教學(xué)的時(shí)候會(huì)說(shuō)這個(gè)關(guān)鍵字被棄置了铆帽,不推薦使用。但是再go語(yǔ)言中竟然還支持德谅,不知道為什么爹橱。
但是 **存在的既是合理的** ,第一次聽說(shuō)是高三班主任的名言窄做,印象深刻
```golang
func myfunc() {
i := 0
HERE:
fmt.Println(i)
i++
if i < 10 {
    goto HERE
}
}   
```

函數(shù)

  1. 函數(shù)定義
func FuncName (a int, b string) (ret int ,err error){
//func關(guān)鍵字 函數(shù)名 (參數(shù)列表) (返回值列表)    
}
  1. 函數(shù)調(diào)用
import packname
...
packname.FuncName(1, "2")
//**必須注意愧驱,大寫字母開頭的為公有屬性,小寫字母開頭的私有屬性椭盏,這條規(guī)則同樣適用于變量和類型**
  1. 不定參數(shù)
//定義
func func1(args ...int) //不定個(gè)數(shù)的參數(shù)组砚,但是類型必須完全不是整型

//參數(shù)的傳遞
func1(1,2,3,4) 
func1(args...)
func1(args[1:]...) //可以給傳遞一個(gè)數(shù)組切片,因?yàn)楸举|(zhì)上這個(gè)不定參數(shù)就是數(shù)組切片實(shí)現(xiàn)的掏颊,只是編寫的時(shí)候不用太繁瑣

//任意類型的不定參數(shù)
使用interface{}傳遞任意類型的參數(shù)是go語(yǔ)言的默認(rèn)慣例
func myPrint(args ...interface{}){
    for _,arg := range args{
        switch arg.(type){
            case int:
            ...
            case string:
            ...
            default:
            ...
        }
    }
}
  1. 多返回值
    與其他語(yǔ)言不同的事糟红,golang可以有多個(gè)返回值,比如查詢一個(gè)文件的大小蚯舱,如果有就返回具體的值改化,如果為空返回nil,如果出錯(cuò)則返回具體的出錯(cuò)信息枉昏。如果要跳過(guò)某個(gè)具體的值陈肛,則使用_下劃線
  2. 匿名函數(shù)和閉包
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兄裂,隨后出現(xiàn)的幾起案子句旱,更是在濱河造成了極大的恐慌,老刑警劉巖晰奖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谈撒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡匾南,警方通過(guò)查閱死者的電腦和手機(jī)啃匿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人溯乒,你說(shuō)我怎么就攤上這事夹厌。” “怎么了裆悄?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵矛纹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我光稼,道長(zhǎng)或南,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任艾君,我火速辦了婚禮采够,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冰垄。我一直安慰自己吁恍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布播演。 她就那樣靜靜地躺著,像睡著了一般伴奥。 火紅的嫁衣襯著肌膚如雪写烤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天拾徙,我揣著相機(jī)與錄音洲炊,去河邊找鬼。 笑死尼啡,一個(gè)胖子當(dāng)著我的面吹牛暂衡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播崖瞭,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼狂巢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了书聚?” 一聲冷哼從身側(cè)響起唧领,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雌续,沒想到半個(gè)月后斩个,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驯杜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年受啥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滚局,死狀恐怖居暖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情核畴,我是刑警寧澤膝但,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站谤草,受9級(jí)特大地震影響跟束,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丑孩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一冀宴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧温学,春花似錦略贮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至轧拄,卻和暖如春揽祥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背檩电。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工拄丰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俐末。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓料按,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親卓箫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子载矿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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

  • 出處---Go編程語(yǔ)言 歡迎來(lái)到 Go 編程語(yǔ)言指南。本指南涵蓋了該語(yǔ)言的大部分重要特性 Go 語(yǔ)言的交互式簡(jiǎn)介丽柿,...
    Tuberose閱讀 18,451評(píng)論 1 46
  • fmt格式化字符串 格式:%[旗標(biāo)][寬度][.精度][arg索引]動(dòng)詞旗標(biāo)有以下幾種:+: 對(duì)于數(shù)值類型總是輸出...
    皮皮v閱讀 1,100評(píng)論 0 3
  • Hello World這是開發(fā)的一個(gè)開發(fā)魔咒恢准,幾乎所有人都是從這開始的,今天我也從魔咒開始先打印一份Hello W...
    cocoaAhda閱讀 1,445評(píng)論 0 3
  • 1.第1章 初識(shí)Go語(yǔ)言 介紹了好多工具甫题,我這里使用sublime text3 + window的go1.4進(jìn)行學(xué)...
    冰天閱讀 445評(píng)論 1 3
  • 晴18/31°馁筐,體感溫度21,空氣質(zhì)量69良坠非,濕度56%敏沉,西南風(fēng)2級(jí),日出05:09日落18:42 今天中午去應(yīng)聘...
    光鋒容閱讀 230評(píng)論 1 0