1. 程式人生 > >go 複習基礎 func

go 複習基礎 func

第一 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)