go 複習基礎 func
阿新 • • 發佈:2018-12-10
第一 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)