第一 string()类型转换
s := "abc"
bt := byte(e)//
//fmt.Println(bt)//报错 没有此种转换方法
bt := []byte(s)
fmt.Println(bt) //[97 98 99] 将字符串按照找字节码的形式组成数组
bt[1] = 's'
fmt.Println(bt) //[97 115 99]
s := string(bt)
fmt.Println(s) //asc
第二 不定参数
//传入切片 如果不加三个点 报错: cannot use []int literal (type []int) as type int in argument to Addsum加上三个点后 就能把切片中的元素取出来 然后放到函数中
//在传到函数中之后会再把这些参数绑在一块组成一个切片
fmt.Println(Addsum([]int{2,3,4,5,66,6}...))
//不定参数 返回一个参数
func Addsum(num ...int)(sum int) {
fmt.Printf("%T\n",num) // []int
fmt.Printf("%D\n",num) // []int
for _,value := range num {
sum+=value
}
return
}
//不定参数 返回多个参数
func Addsum2(num ...float64) (sum , avg float64 , count int) {
for _,value := range num {
sum+=value
count++
}
avg = sum/float64(count) //sum是float64 count是int 将count转换成float 然后得到的结果是 float64类型
return
}
slice和map声明之后没有初始化这时叫做零值,并且slice和map一样都不能与自身相同的数据类型作比较,他们两个本身只能与nil比较,slice和map在零值等于nil时它的长度和容量都是0,但是也有非nil的slice的长度和容量是0,例如:[]int{},因此判断slice是否为空可以使用len(s)==0,而不是s!=nil,因为就算是s!=nil那么slice的长度还是有可能为0还是为空,所以没用,例如上面刚写的[]int{},但是使用len(s)==0那么这个slice要么值是nil也就是未初始化,要么值是空也就是初始化了但是没有添加值 就都是0。map也一样 使用len(m) == 0
声明了map和slice 如果没有初始化那么使用这个map和slice的时候还要make一下,因为只声明的话没有分配到内存,不能使用的。
make(map[int]string) len(map) map
make([]int,0) len(arr) append(arr,1) slice
这是map和slice的区别
//map的声明
//1:关键字map声明 没有初始化也没有分配内存 不能写值 所以==nil 声明后在使用时要么声明是初始化 要么使用make()分配内存
var map1 map[string]string
fmt.Printf("%T,%v,len(m)=%d,m==nil?%v\n",map1,map1,len(map1),map1==nil)
// map[string]string,map[],len(m)=0,m==nil?true
// 2.make()函数声明 没有初始化但是分配了内存 可以直接往里面写值 !=nil
map2 := make(map[string]string)
fmt.Printf("%T,%v,len(m)=%d,m==nil?%v\n",map2,map2,len(map2),map2==nil)
// map[string]string,map[],len(m)=0,m==nil?false\
map3 := map[string]string{}
fmt.Printf("%T,%v,len(m)=%d,m==nil?%v\n",map3,map3,len(map3),map3==nil)
//map[string]string,map[],len(m)=0,m==nil?false
map3["name"] = "聂伟博"
fmt.Println(map3)
//map[name:聂伟博]
// 声明切片
// var 关键字声明
var a []int
fmt.Printf("%T,%v,len(a)=%d,a==nil?%v\n",a,a,len(a),a==nil)
// []int,[],len(a)=0,a==nil?true
fmt.Println(a)
// []in 空
// a[0] = 1
// 和map一样的报错
// make 关键字声明
a1 := make([]int,1)
fmt.Printf("%T,%v,len(a1)=%d,a1==nil?%v\n",a1,a1,len(a1),a1==nil)
// []int,[],len(a1)=0,a1==nil?false
fmt.Println(a1)
// [0]
a1[0] = 1
fmt.Println(a1)