go 基本文法瞭解

來源:互聯網
上載者:User

標籤:blog   http   java   使用   os   strong   io   art   

Packages

每個 Go 程式都是由包組成的。

程式啟動並執行入口是包 `main`。

這個程式使用並匯入了包 "fmt" 和 `"math/rand"`。

按照慣例,包名與匯入路徑的最後一個目錄一致。例如,`"math/rand"` 包由 package rand 語句開始。

注意: 這個程式的運行環境是固定的,因此 rand.Intn 總是會返回相同的數字。 (為了得到不同的數字,需要產生不同的種子數,參閱 rand.Seed。)

 

package mainimport ("fmt""math/rand")func main() {fmt.Println("My favorite number is", rand.Intn(10))}

 

匯入

這個代碼用圓括弧組合了匯入,這是“factored”匯入語句。同樣可以編寫多個匯入語句,例如:

import "fmt"import "math"

package mainimport ("fmt""math")func main() {fmt.Printf("Now you have %g problems.",math.Nextafter(2, 3))}

 

匯出名

在匯入了一個包之後,就可以用其匯出的名稱來調用它。

在 Go 中,首字母大寫的名稱是被匯出的。

Foo 和 FOO 都是被匯出的名稱。名稱 foo 是不會被匯出的。

執行代碼。然後將 math.pi 改名為 math.Pi 再試著執行一下。

 

package mainimport ("fmt""math")func main() {fmt.Println(math.pi)}
函數

函數可以沒有參數或接受多個參數。

在這個例子中,`add` 接受兩個 int 類型的參數。

注意類型在變數名 _之後_。

(參考 這篇關於 Go 文法定義的文章瞭解類型以這種形式出現的原因。)

package mainimport "fmt"func add(x int, y int) int {return x + y}func main() {fmt.Println(add(42, 13))}
函數(續)

當兩個或多個連續的函數具名引數是同一類型,則除了最後一個類型之外,其他都可以省略。

在這個例子中 ,

x int, y int

被縮寫為

x, y int
package mainimport "fmt"func add(x, y int) int {return x + y}func main() {fmt.Println(add(42, 13))}
多值返回

函數可以返回任意數量的傳回值。

這個函數返回了兩個字串。

package mainimport "fmt"func swap(x, y string) (string, string) {return y, x}func main() {a, b := swap("hello", "world")fmt.Println(a, b)}

 

命名傳回值

函數接受參數。在 Go 中,函數可以返回多個“結果參數”,而不僅僅是一個值。它們可以像變數那樣命名和使用。

如果命名了傳回值參數,一個沒有參數的 return 語句,會將當前的值作為傳回值返回。

package mainimport "fmt"func split(sum int) (x, y int) {x = sum * 4 / 9y = sum - xreturn}func main() {fmt.Println(split(17))}

 


變數

var 語句定義了一個變數的列表;跟函數的參數列表一樣,類型在後面。

package mainimport "fmt"var i intvar c, python, java boolfunc main() {fmt.Println(i, c, python, java)}

 

初始設定變數

變數定義可以包含初始值,每個變數對應一個。

如果初始化是使用運算式,則可以省略類型;變數從初始值中獲得類型。

package mainimport "fmt"var i, j int = 1, 2var c, python, java = true, false, "no!"func main() {fmt.Println(i, j, c, python, java)}

 

短聲明變數

在函數中,`:=` 簡潔指派陳述式在明確類型的地方,可以用於替代 var 定義。

函數外的每個文法塊都必須以關鍵字開始(`var`、`func`、等等),`:=` 結構不能使用在函數外。

package mainimport "fmt"func main() {var i, j int = 1, 2k := 3c, python, java := true, false, "no!"fmt.Println(i, j, k, c, python, java)}
基本類型

Go 的基本類型有Basic types

boolstringint  int8  int16  int32  int64uint uint8 uint16 uint32 uint64 uintptrbyte // uint8 的別名rune // int32 的別名// 代表一個Unicode碼float32 float64complex64 complex128

package mainimport ("fmt""math/cmplx")var (ToBe   bool       = falseMaxInt uint64     = 1<<64 - 1z      complex128 = cmplx.Sqrt(-5 + 12i))func main() {const f = "%T(%v)\n"fmt.Printf(f, ToBe, ToBe)fmt.Printf(f, MaxInt, MaxInt)fmt.Printf(f, z, z)}
類型轉換

運算式 T(v) 將值 v 轉換為類型 `T`。

一些關於數值的轉換:

var i int = 42var f float64 = float64(i)var u uint = uint(f)

或者,更加簡單的形式:

i := 42f := float64(i)u := uint(f)

與 C 不同的是 Go 的在不同類型之間的項目賦值時需要顯式轉換。 試著移除例子中float64 或 int 的轉換看看會發生什麼。

package mainimport ("fmt""math")func main() {var x, y int = 3, 4var f float64 = math.Sqrt(float64(x*x + y*y))var z int = int(f)fmt.Println(x, y, z)}

 

常量

常量的定義與變數類似,只不過使用 const 關鍵字。

常量可以是字元、字串、布爾或數字類型的值。

常量不能使用 := 文法定義。

package mainimport "fmt"const Pi = 3.14func main() {const World = "世界"fmt.Println("Hello", World)fmt.Println("Happy", Pi, "Day")const Truth = truefmt.Println("Go rules?", Truth)}
數值常量

數值常量是高精度的 _值_。

一個未指定類型的常量由上下文來決定其類型。

也嘗試一下輸出 needInt(Big) 吧。

package mainimport "fmt"const (Big   = 1 << 100Small = Big >> 99)func needInt(x int) int { return x*10 + 1 }func needFloat(x float64) float64 {return x * 0.1}func main() {fmt.Println(needInt(Small))fmt.Println(needFloat(Small))fmt.Println(needFloat(Big))}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.