字符串值表示了一个一个字符值的集合,在底层,一个字符串值即一个包含了若干字节的序列,长度为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