golang 切片學習

  1. package main
    
    //這裏只說些自己理解的,當然切片的操作遠遠不止這些。
    import (
    	"fmt"
    	"reflect"
    )
    
    /**
     *
     * 學習切片首先要明白len和cap的區別。len()是存儲數據多少,cap()是容量大小。舉個例子一個大會堂可以容納1000人這是cap,但是實際裏面只座了100人這是len
     */
    
    func main() {
    
    	//這裏就存在一個比較有意思的事情看 var iStrings [8]string= [8]string{1: "GO", 2: "Python", 4: "Jave", "C", "C++", "PHP"} 這裏的cap和len各是多少
    	//代碼可以看到都是8, 那麼爲什麼呢?實際我們iStrings 中指存了6個值
    	var iStrings [8]string = [8]string{1: "GO", 2: "Python", 4: "Jave", "C", "C++", "PHP"}
    	fmt.Printf("iStrings len() = %d, cap() = %d\n", len(iStrings), cap(iStrings))
    
    	var vStrings = [8]string{7: "PHP"}
    	fmt.Printf("iStrings len() = %d, cap() = %d\n", len(vStrings), cap(vStrings))
    	//通過上面我們可以看出,len()實際計算的是數組中最後一個元素所在,不管之前的元素是不是爲0,都是len()計算的長度
    
    	array1 := []string{"GO", "Python", "Jave", "C", "C++", "PHP"}
    	array1[2] = "Clojure"
    
    	//切片 遵從左閉右開規則[:3] (0, 1, 2)
    	slice := array1[:3]
    	fmt.Println(slice, array1)
    
    	//這裏可以看到生成切片的類型
    	fmt.Println("type:", reflect.TypeOf(slice))
    
    	slice[2] = "Hello"
    	fmt.Println(slice, array1)
    
    	//不需要擴容
    	slice = append(slice, "Html", "Scala", "Lua")
    	//需要擴容, 這是切片就是一個新的數組
    	//slice = append(slice, "Html", "Scala", "Lua", "CSS")
    
    	fmt.Println(slice, array1)
    
    	//對切片進行擴容並不會對原數組進行擴容
    	fmt.Printf("len %d\n", len(array1))
    
    	//這時可以看到擴容之後的切片就是一個新的數組不在和原數組有關係
    	slice[2] = "Welcome"
    	fmt.Println(slice, array1)
    
    	var array2 [10]int = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} //[2:6) 左閉右開
    
    	slice1 := array2[2:6]
    	fmt.Println(slice1)
    }
    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章