golang入門學(xué)習(xí)筆記(一)

作者: 一字馬胡
轉(zhuǎn)載標志 【2017-11-21】

更新日志

日期 更新內(nèi)容 備注
2017-11-21 新建文章 go語言入門筆記(一)

準備環(huán)境

在Mac下丙者,可以使用下面的命令安裝golang:


brew install go

完成安裝之后复斥,可以命令“go version”來查看安裝的go的版本信息。安裝go完成之后械媒,就可以開始學(xué)習(xí)go語言了目锭,為了提高開發(fā)效率,建議使用IDE進行開發(fā)纷捞,但是如果不喜歡IDE也可以不使用痢虹,我推薦使用IDEA + plug 的方式來準備開發(fā)環(huán)境,可以在plug里面搜索go主儡,然后就可以點擊安裝插件奖唯,完成之后就可以進行g(shù)o開發(fā)了。

hello world !

學(xué)習(xí)一門新語言糜值,首先要寫出“hello world”丰捷,下面的代碼展示了如何使用golang來做這件簡單的事情:


import "fmt"

func main() {
    helloWorld := "hello Word from golang!"
    fmt.Print(helloWorld)
}

var for golang

var在go語言中用于定義一個或者多個變量坯墨,下面是一些例子:


    var hello string = "hello"
    var id1, id2 int = 1, 2
    
    fmt.Print(hello, id1, id2)

一般可以使用“:=”來定義一個變量并且進行初始化,比如下面的例子:


    ok := "this is a word"
    number := 1024

    fmt.Printf("%s, %d", ok, number)

const for golang

在go中使用const來進行常量的聲明病往,關(guān)于go中的常量可以參考:


A const statement can appear anywhere a var statement can.
Constant expressions perform arithmetic with arbitrary precision.
A numeric constant has no type until it’s given one, such as 
by an explicit cast.A number can be given a type by using it in 
a context that requires one, such as a variable assignment or
 function call. For example, here math.Sin expects a float64.

下面是go中使用常量的例子:


    const Kb  = 1024
    const Mb  = Kb * 1024
    const Gb  = Mb * 1024

    fmt.Printf("Kb:%d Mb:%d Gb:%d\n", Kb, Mb, Gb)

loop for golang

在go語言中捣染,沒有像其他語言中一樣同時存在for、while等循環(huán)語法支持停巷,go只支持for語句耍攘,下面是使用for循環(huán)的示例:


    for i:= 0;i < 10; i ++ {
        fmt.Printf("%d\t" , i)
    }
    fmt.Print("\nEnd of for loop.\n")
    
    for {
        fmt.Print("loop...")
    }

如果想要實現(xiàn)無限循環(huán),可以使用for {}叠穆。

if-Else for golang

值得注意的是少漆,在go語言中進行for循環(huán)或者if-else語句編寫的時候,要和其他語言(比如Java)區(qū)分一下硼被,go語言不能在條件上帶上()示损,這一點和其他語言是有所區(qū)別的,需要特別注意嚷硫。下面展示了使用go中的if-else語句的示例:


    size := 1024 * 0.8
    if size > Kb {
        fmt.Printf("%f > %d\n", size, Kb)
    } else {
        fmt.Printf("%f <= %d\n", size, Kb)
    }

    if size := 1024 * 1.1; size > Kb {
        if size > Mb {
            fmt.Printf("%f > %d\n", size, Mb)
        } else {
            fmt.Printf("%d <= %f <= %d", Kb, size, Mb)
        }
    }

可以在go的判斷語句中進行變量賦值检访,這樣寫代碼感覺行云流水,非常流暢仔掸,值得推薦脆贵。

switch for golang

go語言的switch看起來更加強大,下面是switch的使用示例:


    i := 2
    switch i {
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    case 3:
        fmt.Println("three")
    }
    
    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("It's before noon")
    default:
        fmt.Println("It's after noon")
    }

    whatAmI := func(i interface{}) {
        switch t := i.(type) {
        case bool:
            fmt.Println("I'm a bool")
        case int:
            fmt.Println("I'm an int")
        default:
            fmt.Printf("Don't know type %T\n", t)
        }
    }
    whatAmI(true)
    whatAmI(1)
    whatAmI("hey")    

運行上面的代碼起暮,輸出如下:


two
It's after noon
I'm a bool
I'm an int
Don't know type string

array for golang

下面的代碼展示了go語言中數(shù)組的使用示例:


    var array1 [10]int
    for i := 0; i < 10 ; i ++ {
        array1[i] = i * 10
    }

    array2 := [2]float64 {0.01, 0.02}
    array2[0] += 1.0
    array2[1] -= 0.002

    var array3 [3][4]int
    for i := 0; i < 3; i ++ {
        for j := 0; j < 4; j ++ {
            array3[i][j] = i * j
        }
    }

Slices for golang

和數(shù)組類似卖氨,但是和數(shù)組不一樣,go支持Slices负懦,下面是Slices的使用示例:

創(chuàng)建一個空的Slices并且賦值:


    s := make([]int, 2)
    s[0] = 1
    s[1] = 2

append操作:


    s := make([]int, 2)
    s[0] = 1
    s[1] = 2

    s = append(s, 3, 4, 5)

    for i := 0; i < len(s); i ++ {
        fmt.Printf("%d \t", s[i])
    }
    fmt.Print("\nEnd of prinf\n")

拷貝Slices操作:


    cs := make([]int, len(s))
    copy(cs, s)
    for i := 0; i < len(cs); i ++ {
        fmt.Printf("%d \t", cs[i])
    }
    fmt.Print("\nEnd of prinf\n")

slice操作:


    ss := make([]string, 0)
    ss = append(ss, "a", "b", "c", "d", "e", "f")

    ss1 := ss[1:2]
    ss2 := ss[:4]
    ss3 := ss[3:]

    fmt.Printf("%s ,%s , %s , %s\n", ss, ss1, ss2, ss3)
    
    output:
    
    [a b c d e f] ,[b] , [a b c d] , [d e f]

map for golang

map是一種特別重要的數(shù)據(jù)結(jié)構(gòu)筒捺,平時使用也是比較頻繁的,下面的代碼展示了go語言中的map的使用方法:


    m := make(map[string]int)
    m["ok"] = 200
    m["error"] = 404

    //delete item from map
    delete(m, "ok")

    is, v:= m["error"]

    fmt.Print(v, is, "\n")

    mp := map[string]int {"a":10, "b": 20}
    fmt.Print(mp, "\n")

Range for golang

下面是使用Range的例子:


    num :=  make([]int, 0)
    num = append(num, 1, 2, 3, 4, 5)
    sum := 0
    for _, s := range num {
        sum += s
    }

    for k, v := range m {
        fmt.Printf("%s, %s\n" , k, v)
    }

    for i, v := range "golang" {
        fmt.Printf("%d->%c\n", i, v)
    }


range像是一個迭代器(和其他語言的迭代器非常類似)纸厉。

function for golang

下面的代碼展示了go語言中方法的使用示例:


func total(a, b int) int  {
    return a + b
}

fmt.Print("sum:", total(1, 3), "\n")

在go語言的方法設(shè)計中系吭,允許有多個返回值,下面是示例:


func multiReturn() (int, string, float32)  {
    return 1, "ok", 0.1
}

    a, b, c := multiReturn()

    fmt.Print("multiReturn:", a, b, c, "\n")

可變參數(shù):


func multiParams(args ...int) int {
    sum := 0
    for _, v := range args {
        sum += v
    }
    
    return sum
}


    is = multiParams(1, 2, 3, 4, 5)
    fmt.Printf("sum: %d\n" , is)

匿名函數(shù):


func getIntValue() func() int {
    i := 0
    return func() int {
        i += 1
        return i
    }
}

    nextInt := getIntValue()

    fmt.Printf("%d, %d, %d\n", nextInt(), nextInt(), nextInt())

pointer for golang

在go語言中颗品,你可以使用指針進行一些操作了肯尺,是不是用慣了java就會不習(xí)慣呢?下面是示例代碼:


    var point *int
    num := 10
    point = &num
    fmt.Print("point:", point, " value:", *point)

struct for golang

可以使用指針躯枢,又有struct则吟,是不是和c語言越來越像了呢?下面是使用struct的示例:


    type info struct {
        id int
        name struct{
            firstName string
            lastName string
             }
    }

    var p *info
    p = new(info)
    p.id = 12
    p.name.firstName = "jian"
    p.name.lastName = "hu"

    infoo := new(info)
    infoo.id = 13
    infoo.name.firstName = "haha"
    infoo.name.lastName = "lulu"

    fmt.Print(infoo, "\n")

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锄蹂,一起剝皮案震驚了整個濱河市逾滥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖寨昙,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異掀亩,居然都是意外死亡舔哪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門槽棍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捉蚤,“玉大人,你說我怎么就攤上這事炼七±虑桑” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵豌拙,是天一觀的道長陕悬。 經(jīng)常有香客問我,道長按傅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮羔飞,結(jié)果婚禮上偿荷,老公的妹妹穿的比我還像新娘。我一直安慰自己况芒,他們只是感情好惜纸,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绝骚,像睡著了一般耐版。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上皮壁,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天椭更,我揣著相機與錄音,去河邊找鬼蛾魄。 笑死虑瀑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的滴须。 我是一名探鬼主播舌狗,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扔水!你這毒婦竟也來了痛侍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎主届,沒想到半個月后赵哲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡君丁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年枫夺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绘闷。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡橡庞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出印蔗,到底是詐尸還是另有隱情扒最,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布华嘹,位于F島的核電站吧趣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏除呵。R本人自食惡果不足惜再菊,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颜曾。 院中可真熱鬧纠拔,春花似錦、人聲如沸泛豪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诡曙。三九已至臀叙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間价卤,已是汗流浹背劝萤。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慎璧,地道東北人床嫌。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像胸私,于是被迫代替她去往敵國和親厌处。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354