字符串值表示了一个一个字符值的集合,在底层,一个字符串值即一个包含了若干字节的序列,长度为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(){
...//省略
}
参数列表中参数必须有名称,结果列表中结果名称可有可无
如果函数声明的结果是有名称的,则return关键字后面就不用追加任何东西了
eg:
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