字元串值表示了一個一個字元值的集合,在底層,一個字元串值即一個包含了若幹位元組的序列,長度為0的序列與一個空字元串對應。字元串的長度即底層位元組列中位元組的個數。
字元串值是不可變的,對字元串的操作隻會傳回一個新的字元串,而不會改變原字元串并傳回。
隻有基本類型及其别名類型才可以作為常量的類型
數組的長度是數組類型的一部分。類型聲明中的數組長度不同,即使數組類型的元素類型相同,他們也是不同的類型。
數組:長度不可變
數組零值: 一個不包含任何元素的空數組。
var ipv4 = [...]uint8{192,168,0,1}
切片:長度可變,引用類型,零值的長度與容量都為0
var ips = []string{"192.168.0.1","192.168.0.2"}
ips.append("192.168.0.3")
ips = make([]string,100)
fmt.Println(len(ips)) //100
fmt.Println(cap(ips)) //100
字典:其官方稱謂是map,引用類型,零值是nil,零值的長度為0
var ipSwitches = map[string]bool{}
ipSwitches["192.168.0.1"]=true
delete(ipSwitches,"192.168.0.1")
函數與方法
在go中,函數是一等類型,可以将其當做一個值來傳遞和使用。
函數可以沒有參數清單,也可以沒有結果清單,但空參數清單必須保留括号,而空結果清單可以不用
eg:
func printTab(){
...//省略
}
參數清單中參數必須有名稱,結果清單中結果名稱可有可無
func divide(dividend int,divisor int)(result int,err error){
if divisor == 0{
err = errors.New("division by zero")
return
}
result = dividend/divisor
return
}
接口:定義了一組行為,其中每個行為都由一個方法聲明表示。(方法聲明隻有方法簽名而沒有方法體)
eg:
type Talk interface{
Hello(userName string)string
Talk(heard string)(saying string, end bool, err error)
}
隻要一個資料類型的方法集合中包含了Talk接口聲明的所有方法,那麼它就是Talk接口的實作類型。
結構體:值類型,其零值不是nil