包
每個Go程序都是由包組成的扳炬,且每個程序是從main包開始運行吏颖,看一段實例代碼:
package main
import (
"fmt"
"math/cmplx"
)
func main(){
x complex128 = cmplx.Sqrt(-5+12i)
fmt.Println(x)
}
上述代碼中通過導(dǎo)入路徑”fmt”和”math/cmplx”來使用這兩個包。Go約定包中源碼的包名與引入路徑的最后一個元素一致恨樟,例如”math/cmplx”這個包中的源碼均是以package cmplx語句開始的半醉。
導(dǎo)入
Go通過import來導(dǎo)入包,有兩種導(dǎo)入形式:import packageName
和
import(
"packageName1"
"packageName2"
....
)
當然也支持通過多個import來導(dǎo)入多個包劝术,但是Go官方更推薦通過分組導(dǎo)入的方式缩多,也就是上述中的第二種導(dǎo)入方式。
導(dǎo)出名
在Go中养晋,如果一個名字以大寫字母開頭衬吆,那么它就是已導(dǎo)出的,例如Sqrt以及Pi绳泉,這兩個都是導(dǎo)出名逊抡,一個導(dǎo)出自math/cmplx包一個導(dǎo)出自math包。在導(dǎo)入包時零酪,只能引用其中已導(dǎo)出的名字冒嫡,所有”未導(dǎo)出”的名字只能在包內(nèi)訪問。
函數(shù)
在Go中四苇,函數(shù)以func來定義孝凌,可以沒有參數(shù)或多個參數(shù),參數(shù)類型以空格隔開置于參數(shù)后方月腋。與不同的是Go的參數(shù)如果存在兩個或兩個以上類型相同胎许,則除了最后一個參數(shù)類型必須聲明之外,其他幾個參數(shù)可以忽略罗售。另外辜窑,Go中函數(shù)可以返回多值且存在返回值時必須聲明返回值類型,也可對返回值進行命名寨躁。已命名返回值會被視作定義在函數(shù)頂部的變量穆碎,當函數(shù)中存在不帶參數(shù)的return語句時,則返回已命名的返回值职恳,也就是’直接’返回所禀。
變量
Go通過var來聲明變量,變量類型與函數(shù)的參數(shù)類型一樣置于變量后面放钦,以空格隔開色徘,多個連續(xù)變量類型相同時,可只寫最后一個變量類型操禀。實例如下:
package main
import "fmt"
var z,x int
func main(){
var i,j int
var t string
var test = true
k := "test"
var m,n,s = false,1,"test"
}
從上述代碼中我們可以看出Go的變量定義可以出現(xiàn)在函數(shù)級也可以出現(xiàn)在包級褂策,且可以不聲明類型,通過初始值來獲取類型,Go中可以同時給多個變量賦值斤寂,也可通過:=
來省略var關(guān)鍵字(僅限函數(shù)內(nèi)耿焊,函數(shù)外所有變量都必須存在var關(guān)鍵字函數(shù)都必須存在func關(guān)鍵字)。
Go的基本類型以及零值
Go的基本類型很多遍搞,如下:
bool
strinh
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64
byte //int8別名
rune //int32別名
float32 float64
complex64 complex128
沒有明確初始值的變量聲明會被賦予它們的零值罗侯,數(shù)值類型的零值便為0,字符串則為空字符串溪猿,布爾類型的則為false钩杰。
在Go中支持顯示轉(zhuǎn)換變量類型,也就是強制轉(zhuǎn)換诊县。
常量
常量的定義與變量相似讲弄,不同的是常量使用const來定義且不能使用:=
來聲明