亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go例子和成語

Go例子和成語

Go
慕容708150 2021-04-06 17:19:18
沒有太多的Go語言代碼可用于學習該語言,而且我敢肯定,我并不是唯一一個嘗試過該語言的人。因此,如果您發現有關該語言的一些有趣信息,請在此處發布示例。我也在尋找Go中慣用的方式來做事,C / C ++思維風格“移植”到Go,有關語法的常見陷阱,真的很有趣。
查看完整描述

3 回答

?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

推遲陳述


“ defer”語句調用一個函數,該函數的執行被推遲到周圍函數返回的那一刻。


DeferStmt =“ defer”表達式。


表達式必須是函數或方法調用。每次執行“ defer”語句時,都會對函數調用的參數進行評估并重新保存,但不會調用該函數。延遲的函數調用將在周圍函數返回之前立即以LIFO順序執行,但是在對返回值(如果有)進行求值之后才執行。



lock(l);

defer unlock(l);  // unlocking happens before surrounding function returns


// prints 3 2 1 0 before surrounding function returns

for i := 0; i <= 3; i++ {

    defer fmt.Print(i);

}

更新:


defer現在也處理慣用方式panic在例外樣方式:


package main


import "fmt"


func main() {

    f()

    fmt.Println("Returned normally from f.")

}


func f() {

    defer func() {

        if r := recover(); r != nil {

            fmt.Println("Recovered in f", r)

        }

    }()

    fmt.Println("Calling g.")

    g(0)

    fmt.Println("Returned normally from g.")

}


func g(i int) {

    if i > 3 {

        fmt.Println("Panicking!")

        panic(fmt.Sprintf("%v", i))

    }

    defer fmt.Println("Defer in g", i)

    fmt.Println("Printing in g", i)

    g(i+1)

}


查看完整回答
反對 回復 2021-04-26
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

Go對象文件實際上包含明文標題:


jurily@jurily ~/workspace/go/euler31 $ 6g euler31.go

jurily@jurily ~/workspace/go/euler31 $ cat euler31.6

amd64

  exports automatically generated from

  euler31.go in package "main"

    import


$$  // exports

  package main

    var main.coin [9]int

    func main.howmany (amount int, max int) (? int)

    func main.main ()

    var main.initdone· uint8

    func main.init ()


$$  // local types

  type main.dsigddd_1·1 struct { ? int }


$$


!

<binary segment>


查看完整回答
反對 回復 2021-04-26
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

我看到幾個人抱怨“ for-loop”,類似“為什么i = 0; i < len; i++在這個時代必須說?”。


我不同意,我喜歡for結構。如果愿意,可以使用長版本,但是慣用的Go是


var a = []int{1, 2, 3}

for i, v := range a {

    fmt.Println(i, v)

}

該for .. range構造在所有元素上循環并提供兩個值-索引i和值v。


range 也適用于地圖和頻道。


不過,如果您不喜歡for任何形式,則可以在以下幾行中定義each,map等等:


type IntArr []int


// 'each' takes a function argument.

// The function must accept two ints, the index and value,

// and will be called on each element in turn.

func (a IntArr) each(fn func(index, value int)) {

    for i, v := range a {

        fn(i, v)

    }

}


func main() {

    var a = IntArr([]int{2, 0, 0, 9}) // create int slice and cast to IntArr

    var fnPrint = func(i, v int) {

        fmt.Println(i, ":", v)

    } // create a function


    a.each(fnPrint) // call on each element

}

印刷


0 : 2

1 : 0

2 : 0

3 : 9

我開始非常喜歡Go :)


查看完整回答
反對 回復 2021-04-26
  • 3 回答
  • 0 關注
  • 267 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號