1. 程式人生 > >Go語言學習八:切片(slice)和範圍(range)

Go語言學習八:切片(slice)和範圍(range)

// Go 語言切片是對陣列的抽象。切片的單詞來源於可以對其他陣列和切片進行片段擷取


// Go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,
// Go中提供了一種靈活,功能強悍的內建型別切片("動態陣列"),
// 與陣列相比切片的長度是不固定的,可以追加元素,
// 在追加時可能使切片的容量增大。


package main


import "fmt"


func main() {
	// 切片的長度和容量
	var numbers = make([]int, 3, 5) //用make建立切片
	printSlice(numbers)


	// 空(nil)切片
	// 切片在未初始化時預設是nil,長度是0,容量也是0
	var numbers1 []int
	printSlice(numbers1)
	if numbers1 == nil {
		fmt.Printf("切片是空的")
	}


	//切片擷取
	numbers2 := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
	/* 列印子切片從索引1(包含) 到索引4(不包含)*/
	fmt.Println("numbers2[1:4] ==", numbers2[1:4])


	fmt.Println("numbers2[:3] ==", numbers2[:3]) //索引是從0開始的


	fmt.Println("numbers2[4:] ==", numbers2[4:])


	numbers3 := make([]int, 0, 5)
	printSlice(numbers3)


	numbers4 := numbers2[:2] //索引  0(包含) 到索引 2(不包含),這是為了計算數量更方便
	printSlice(numbers4)


	// append() 和 copy() 函式
	var numbers5 []int
	printSlice(numbers5)


	numbers5 = append(numbers5, 0) //容量是2的n次方
	printSlice(numbers5)


	numbers5 = append(numbers5, 1)
	printSlice(numbers5)


	numbers5 = append(numbers5, 2, 3, 4)
	printSlice(numbers5)


	// 建立兩倍容量的切片
	numbers6 := make([]int, len(numbers5), (cap(numbers5))*2)


	copy(numbers6, numbers5) //前面是目標,後面是要複製的內容,把原來的覆蓋、
	printSlice(numbers6)


	// Go 語言中 range 關鍵字用於for迴圈中迭代陣列(array)、切片(slice)、
	// 連結串列(channel)或集合(map)的元素。在陣列和切片中它返回元素的索引值,
	// 在集合中返回 key-value 對的 key 值。


	//range是取出兩值


	nums := []int{2, 3, 4}
	sum := 0
	for _, num := range nums {
		sum += num
	}
	fmt.Println("sum:", sum)
	//在陣列上使用range將傳入index和值兩個變數。
	// 上面那個例子我們不需要使用該元素的序號,所以我們使用空白符"_"省略了。
	// 有時侯我們確實需要知道它的索引。
	for i1, num1 := range nums {
		if num1 == 3 {
			fmt.Println("index:", i1) //索引從0開始
		}
	}


	//range也可以用在map的鍵值對上。
	kvs := map[string]string{"a": "apple", "b": "banana"}
	for k, v := range kvs {
		fmt.Printf("%s -> %s\n", k, v)
	}
	//range也可以用來列舉Unicode字串。第一個引數是字元的索引,第二個是字元(Unicode的值)本身。
	for i2, c := range "go" {
		fmt.Println(i2, c)//得出的c是ASCII值
	}


}


func printSlice(x []int) {
	//這裡的len()是用來獲得現在切片資料的長度,而cap()則為了求總容量
	fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

相關推薦

Go語言學習切片slice範圍range

// Go 語言切片是對陣列的抽象。切片的單詞來源於可以對其他陣列和切片進行片段擷取 // Go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用, // Go中提供了一種靈活,功能強悍的內建型別切片("動態陣列"), // 與陣列相比切片的長度是不固定的,可以追加

go語言學習(一):陣列/切片

學習區塊鏈之後,發現還要學習加密,接觸到的視訊是:Go的crypto包,所以開始接觸Go。因為和solidity有些相似,但是比solidity簡單一些,就開始放鬆的心態去學習。每天翻著go菜鳥教程,感覺簡單的一批,可是當自己真要寫程式碼的時候,就有點悶了. --凡是還是得腳踏實地才行! p

GO語言學習(四)介面與channel併發

一.介面 1.介面 type Humaner interface { //方法,只有宣告,沒有實現,有別的型別實現 sayhi() } type Student struct { name string id int } //Student實現了此方法 func

Go語言學習指標與傳遞到函式的指標

package main import ( "fmt" ) const MAX int = 3 func main() { var a int = 20 var ip *int /* 宣告

Go語言學習筆記十一 切片slice

操作 容量 方括號 一個 組類型 學習 中學 slice 修改 Go語言學習筆記十一: 切片(slice) 切片這個概念我是從python語言中學到的,當時感覺這個東西真的比較好用。不像java語言寫起來就比較繁瑣。不過我覺得未來java語法也會支持的。 定義切片 切片可以

go語言學習-陣列切片slice通過陣列賦值或建立詳解

go語言中陣列切片(slice)建立一般有兩種種方式: 陣列切片的建立 直接建立: arr := make([]int,10) 基於資料建立 arr := arr2[frist:last] 該切片的元素為從下標為frist的元素開始,到小標

GO語言學習Go 語言接口

結構 數據 ble 語言 print 一起 實例 ... class Go 語言接口 Go 語言提供了另外一種數據類型即接口,它把所有的具有共性的方法定義在一起,任何其他類型只要實現了這些方法就是實現了這個接口。 實例 /* 定義接口 */ type inter

GO語言學習切片陣列

1.陣列、切片   陣列的長度是固定的,切片的長度是可變長的     陣列的長度在宣告時就必須給定,並且之後不會再變化,陣列的長度是其型別的一部分,比如[1]string和[2]string 不是相同的陣列型別.     切片可以看作是對陣列的封裝,每一個切片的底層的資料結構一定

Go語言學習課-結構體與包Go語言的面向物件

      接下來講解一下Go語言中的面向物件思想程式設計。在Go語言面向物件與其它面嚮物件語言有著很大的差別。首先Go語言的不存在繼承和多型,而且不存在建構函式。並且Go語言不採用class來實現類,而是採用結構體加指標實現。不得不說,這讓類的定義變得很複雜,但是又不失合理

Go語言學習筆記變數作用域

Go語言變數型別   Go語言變數型別分為三種:區域性變數,全域性變數,形式引數 型別 定義 描述 區域性變數 在函式內定義的變數 作用域只在函式體內 全域性變數 在函式外定義的變數 全域性變數可以在整個包甚至外部包(被匯出後)

Go語言學習筆記文件操作

see 大小 unix rdo 筆記 不能 hid code lag 加 Golang學習 QQ群共同學習進步成家立業工作 ^-^ 群號:96933959 文件讀取 os.File 封裝了文件相關操作 type File File代表一個打開的文件對象。

go語言學習筆記4--容器與字符串的基本概念

都是 empty 知識 nil 來講 java nbsp unicode ... 一、 Slice(切片) package main import ( "fmt" ) //切片,slice func main() { arr := [...]int{1,2,

Go語言學習筆記1——順序編程

寫法 AR [] 多重賦值 返回值 賦值 表達 div long Go語言學習筆記這一堆主要是《Go語言編程》(人民郵電出版社)的讀書筆記。中間會穿插一些零碎的點,比如源碼學習之類的。大概就是這樣吧。 1. 順序編程 1.1 變量 變量的聲明: var 變量名 類型 va

Go語言學習筆記2

world int 數組 [1] string 語言學 rim str name 數組 var a [2]string a[0] = "Hello" a[1] = "World" primes := [6]int{2, 3, 5, 7

GO語言學習GO語言學習API文檔

tro 文檔 lan get study spa Go語言 tps http 一:GoLang標準庫API文檔 https://studygolang.com/pkgdoc GO語言學習(三)GO語言學習API文檔

GO語言學習Go 語言基礎語法

序列 單行 break ani 開頭 ntp false nil div Go 標記 Go 程序可以由多個標記組成,可以是關鍵字,標識符,常量,字符串,符號。如以下 GO 語句由 6 個標記組成: fmt.Println("Hello, World!")

GO語言學習Go 語言數據類型

支持 Go語言 基於 固定 run 出現 簡單 架構 ble 在 Go 編程語言中,數據類型用於聲明函數和變量。 數據類型的出現是為了把數據分成所需內存大小不同的數據,編程的時候需要用大數據的時候才需要申請大內存,就可以充分利用內存。 Go 語言按類別有以下幾種數據類

GO語言學習Go 語言變量

數據 指定 需要 內容 load 默認值 操作符 此外 alt Go 語言變量 變量來源於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變量可以通過變量名訪問。 Go 語言變量名由字母、數字、下劃線組成,其中首個字母不能為數字。 聲明變量的一般形式是使用 va

GO語言學習十四Go 語言數組

brush 多維數組 type 本質 數據結構 com 循環 方式 整型 Go 語言數組 Go 語言提供了數組類型的數據結構。 數組是具有相同唯一類型的一組已編號且長度固定的數據項序列,這種類型可以是任意的原始類型例如整形、字符串或者自定義類型。 相對於去聲明numb

GO語言學習十五Go 語言指針

%x pre ble 內存地址 內容 none oat enc 空值 Go 語言指針 Go 語言中指針是很容易學習的,Go 語言中使用指針可以更簡單的執行一些任務。 接下來讓我們來一步步學習 Go 語言指針。 我們都知道,變量是一種使用方便的占位符,用於引用計算機內存