這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
主要介紹go語言的基本元素,包引入,變數,函式宣告
引入包:
go語言通過import引入包
最佳實務:import順序:系統package,第三方package,程式自己的package
package mainimport ( "fmt" "math")func main() { fmt.Printf("math test number %g ",math.Sqrt(7))}# 運行輸出cuixiaozhuai:main cuixiaohuan$ ./hellomath test number 2.6457513110645907
函數定義
go中函數可以沒有參數或者接受多個參數
基本格式
func xx(AA type,aa) Type {}
package mainimport ( "fmt")func funcNoParams() string { return "Hello no params func"}func add(x int, y int) int { return x + y}func main() { fmt.Println(funcNoParams()) fmt.Println(add(3, 3))}cuixiaozhuai:main cuixiaohuan$ ./helloHello no params func6
func 可以多值返回
func swap(a, b string) (string, string) { return b, a}func main() { a, b := swap("cuihuan_first", "cuihuan_second"); fmt.Println(a, b)}cuixiaozhuai:main cuixiaohuan$ ./hellocuihuan_second cuihuan_first
變數操作
go 中通過var 定義變數,參數在前,類型在後
var boolVal, boolVal2 boolfunc main() { var intVal int var stringVal string fmt.Println(boolVal, boolVal2, intVal, stringVal)}cuixiaozhuai:main cuixiaohuan$ ./hellofalse false 0
變數預設值
沒有賦值的時候會給上預設值。
var boolVal, boolVal2 bool = true, falsefunc main() { // 宣告類型 var intVal int = 33 var stringVal string = "xiaozhuai string" fmt.Println(boolVal, boolVal2, intVal, stringVal) // 不宣告類型 var undefineType1,undefineType2,undefineType3 = "yo yo yo","qiekenao",666 fmt.Println(undefineType1, undefineType2, undefineType3)}cuixiaozhuai:main cuixiaohuan$ ./hellotrue false 33 xiaozhuai stringyo yo yo qiekenao 666
:= 賦值
函數中的賦值可以用 :=代替var 【:= 標示聲明又賦值,但是只能用於函數內】
var boolVal, boolVal2 bool = true, falsefunc main() { // 宣告類型 var intVal int = 33 var stringVal string = "xiaozhuai string" fmt.Println(boolVal, boolVal2, intVal, stringVal) // 不宣告類型 := 聲明賦值 undefineType1,undefineType2,undefineType3 := "yo yo yo","qiekenao",666 fmt.Println(undefineType1, undefineType2, undefineType3)}
注意:= 簡介賦值,但是無法,聲明,賦值,定義類型。和var的區別
函數外,必須用var func等等
變數基本類型
func main() { // go 變數全部類型和預設值 var boolVal bool fmt.Println("bool default:",boolVal) var stringVal string fmt.Println("string default:",stringVal) // int 在32位上預設32 64位預設64,uint 和 uintptr類似 var intVal int var int8Val int8 var int16Val int16 var int32Val int32 var int64Val int64 fmt.Println("int default:",intVal) fmt.Println("int8 default:",int8Val) fmt.Println("int16 default:",int16Val) fmt.Println("int32 default:",int32Val) fmt.Println("int64 default:",int64Val) fmt.Println("max int 64:", uint64(1<<64-1)) var uintVal uint var uint8Val uint8 var uint16Val uint16 var uint32Val uint32 var uint64Val uint64 var uintptrVal uintptr fmt.Println("uint default:",uintVal) fmt.Println("uint8 default:",uint8Val) fmt.Println("uint16 default:",uint16Val) fmt.Println("uint32 default:",uint32Val) fmt.Println("uint64 default:",uint64Val) fmt.Println("uintptr default:",uintptrVal) // uint8 別名 var byteVal byte fmt.Println("byte default:",byteVal) // int 32 別名,代表一個unicode var runeVal rune fmt.Println("rune default:",runeVal) // int 32 別名,代表一個unicode var floatVal float32 fmt.Println("floatVal default:",floatVal) // int 32 別名,代表一個unicode var complexVal complex64 fmt.Println("complex64Val default:",complexVal)}cuixiaozhuai:main cuixiaohuan$ ./hellobool default: falsestring default:int default: 0int8 default: 0int16 default: 0int32 default: 0int64 default: 0max int 64: 18446744073709551615uint default: 0uint8 default: 0uint16 default: 0uint32 default: 0uint64 default: 0uintptr default: 0byte default: 0rune default: 0floatVal default: 0complex64Val default: (0+0i)
int 類型的零值 是0 bool 預設false 字串為”" Null 字元串
18446744073709551615 byte 到底多大 【2097152TB】
int 64 可以表示200wTB的資料,那麼問題來了,PB的資料如何表示,float
這裡也可以通俗的理解下:資料庫中的int(11)類型作為主鍵,基本不用擔心滿,200wTB*8 的資料量,足以
變數類型推導:
func main() { v := 666 f := 666.666 s := "string 666" i := v fmt.Printf("666 is of type %T\n", v) fmt.Printf("666.666 is of type %T\n", f) fmt.Printf("'string666' is of type %T\n", s) fmt.Printf("傳遞 is of type %T\n", i)}# 需要注意的是,go中屬於強型別,一旦定義之後就不允許改變為其他類型。cuixiaozhuai:main cuixiaohuan$ ./hello666 is of type int666.666 is of type float64'string666' is of type string傳遞 is of type int
另外變數的官方參考文檔:
https://golang.org/ref/spec#C...
常量:const
go中常量不能用:=
go中常量可以是字元,字串,布爾和數字類型的值
const PI = 3.14func main() { const test = "test const"; fmt.Println(test, PI);}cuixiaozhuai:main cuixiaohuan$ ./hellotest const 3.14