你可能不知道的一些Go Packages知識

來源:互聯網
上載者:User

關於Go Package關於Go Package

Go Packages 主要用來把相關的functions, variables, 和constants 組織到一起,這樣你就可以很方便的遷移Packages和把它們用到自己的程式中。

注意除了main package, Go packages 不是自治程式,不能被編譯成可執行檔。它們必須直接或者間接的被main package調用才能使用。
如果你直接執行一個沒個package:

$ go run aPackage.go
go run: cannot run non-main package

關於Go function關於Go function

匿名函數(anonymous functions)
匿名函數可以在內部定義,而不需要使用函數名,匿名函數通常被用來實現一些不需要太多代碼的功能。在Go中 一個函數可以返回一個匿名函數,或者使用匿名函數作為它的其中一個參數。另外,匿名函數可以通過一Go 變數來訪問。注意,匿名函數也稱為閉包,特別是在函數式編程術語中。
匿名函數具有較小的實現和本地焦點,這被認為是一種很好的做法。 如果匿名函數沒有本地焦點,那麼你可能需要考慮使其成為常規函數。
注意不要在沒有特殊需求的時候在你程式中使用使用大量的匿名函數。

Go 函數可以返回多個值

func aFunction() (int, int, float64, float64) {
}

下面會有一個用一個functions.go來展示Go的匿名函數

package mainimport (    "fmt"    "os"    "strconv")func doubleSquare(x int) (int, int) {    return x * x, x * x }func main() {    arguments := os.Args    if len(arguments) != 2 {        fmt.Println("The program needs 1 argument!")        return    }    y, err := strconv.Atoi(arguments[1])    if err != nil {        fmt.Println(err)        return    }    square := func (s int) int {        return s * s     }    fmt.Println("The  square of", y, "is", square(y))    double := func (s int) int {        return s + s    }    fmt.Println("The double of", y, "is", double(y))    fmt.Println(doubleSquare(y))    d, s := doubleSquare(y)    fmt.Println(d, s)}

上面的square 和 double 都持有一個匿名函數。不好的一點是,在以後的程式中你可以更改square,double或之後其他變數的值為匿名函數的變數,這意味著這些變數的含義可以更改並計算其他內容。

修改值為匿名函數變數的值是不推薦的,因為這可能是導致非常難以排查bug的主要原因。

如上面所示我們可以直接列印doubleSquare()的傳回值,也可以給他們分配不同的變數進行列印。

執行functions.go:

$ go run function.go 1 21 The program needs 1 argument!rMacBook:code mtsouk$ go run functions.go 10The square of 10 is 100The double of 10 is 2020 10020 100

函數的傳回值可以被命名函數的傳回值可以被命名

下面以returnNames.go為例,我們會把returnNames.go的代碼分成3部分來進行講解
Part 1

package mainimport (    "fmt"    "os"    "strconv")func nameMinMax(x, y int) (min, max int) {    if x > y {        min = y        max = x    } else {        min = x        max = y    }    return}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.