php数组在golang,go语言数据类型-数组(array)
數(shù)組是Go語(yǔ)言編程中最常用的數(shù)據(jù)結(jié)構(gòu)之一。顧名思義,數(shù)組就是指一系列同一類型數(shù)據(jù)的集合。數(shù)組中包含的每個(gè)數(shù)據(jù)被稱為數(shù)組元素(element),一個(gè)數(shù)組包含的元素個(gè)數(shù)被稱為數(shù)組的長(zhǎng)度。
在Go語(yǔ)言中數(shù)組是一個(gè)值類型(value type)。是真真實(shí)實(shí)的數(shù)組,而不是一個(gè)指向數(shù)組內(nèi)存起始位置的指針,也不能和同類型的指針進(jìn)行轉(zhuǎn)化,這一點(diǎn)嚴(yán)重不同于C語(yǔ)言。所有的值類型變量在賦值和作為參數(shù)傳遞時(shí)都將產(chǎn)生一次復(fù)制動(dòng)作。如果將數(shù)組作為函數(shù)的參數(shù)類型,則在函數(shù)調(diào)用時(shí)該參數(shù)將發(fā)生數(shù)據(jù)復(fù)制。因此,在函數(shù)體中無(wú)法修改傳入的數(shù)組的內(nèi)容,因?yàn)楹瘮?shù)內(nèi)操作的只是所傳入數(shù)組的一個(gè)副本。
定義方式如下
var arr [n]type? ? n表示數(shù)組長(zhǎng)度,type表示數(shù)組存儲(chǔ)類型。
在Go語(yǔ)言中,數(shù)組長(zhǎng)度在定義后就不可更改,在聲明時(shí)長(zhǎng)度可以為一個(gè)常量或者一個(gè)常量表達(dá)式(常量表達(dá)式是指在編譯期即可計(jì)算結(jié)果的表達(dá)式)。數(shù)組的長(zhǎng)度是該數(shù)組類型的一個(gè)內(nèi)置常量,可以用Go語(yǔ)言的內(nèi)置函數(shù)len()來(lái)獲取。
arrLength := len(arr)
常規(guī)聲明方法
var a [5]byte //長(zhǎng)度為5的數(shù)組,每個(gè)元素為一個(gè)字節(jié)
var b [2*N] struct { x, y int5 } //復(fù)雜類型數(shù)組
var c [5]*int // 指針數(shù)組
var d [2][3]int //二維數(shù)組
var e [2][3][4]int //等同于[2]([3]([4]int))
3.1 先聲明再初始化
a = {'1','2','3'}
d = {{1,2,3},{4,5,6}}
3.2 直接聲明并初始化
a := [3]byte{'1', '2', '3'} //聲明并初始化一個(gè)長(zhǎng)度為3的byte數(shù)組
a := [...]byte{'1', '2', '3'} //可以省略長(zhǎng)度而采用`...`的方式,Go會(huì)自動(dòng)根據(jù)元素個(gè)數(shù)來(lái)計(jì)算長(zhǎng)度
d := [2][3]int{[3]int{1,2,3},[3]int{4,5,6}}
d := [2][3]int{{1,2,3},{4,5,6}} //如果內(nèi)部的元素和外部的一樣,那么上面的聲明可以簡(jiǎn)化,直接忽略內(nèi)部的
類型
3.3 例如:
package main
import(
"fmt"
)
func main(){
var arr1 [5]int
arr2 := [5]int{1, 2, 3, 4, 5} //指定長(zhǎng)度為5,并賦5個(gè)初始值
arr3 := [5]int{1, 2, 3} //指定長(zhǎng)度為5,對(duì)前3個(gè)元素進(jìn)行賦值,其他元素為零值
arr4 := [5]int{4: 1} //指定長(zhǎng)度為5,對(duì)第5個(gè)元素賦值
arr5 := [...]int{1, 2, 3, 4, 5} //不指定長(zhǎng)度,對(duì)數(shù)組賦以5個(gè)值
arr6 := [...]int{8: 1} //不指定長(zhǎng)度,對(duì)第9個(gè)元素(下標(biāo)為8)賦值1
fmt.Println(arr1, arr2, arr3, arr4, arr5, arr6)
}? ? 輸出結(jié)果為:
[root@localhost mygo]# go run test.go
[0 0 0 0 0] [1 2 3 4 5] [1 2 3 0 0] [0 0 0 0 1] [1 2 3 4 5] [0 0 0 0 0 0 0 0 1]
可以使用數(shù)組下標(biāo)來(lái)訪問(wèn)數(shù)組中的元素。數(shù)組下標(biāo)從0開(kāi)始,len(arr)-1則表示最后一個(gè)元素的下標(biāo)
4.1 計(jì)算數(shù)組長(zhǎng)度
通過(guò)go語(yǔ)言內(nèi)置函數(shù)len
例如
package main
import(
"fmt"
)
func main(){
arr := [...]int {9: 1}
fmt.Println(arr)
fmt.Println(len(arr))
}? ? 輸出結(jié)果為:
[root@localhost mygo]# go run test.go
[0 0 0 0 0 0 0 0 0 1]
10
4.2 普通訪問(wèn)方式
for i := 0; i < len(arr); i++ {
fmt.Println(i, arr[i])
}
例如:
package main
import(
"fmt"
)
func main(){
arr := [5]int {1, 2, 3, 4, 5}
for i := 0; i < len(arr); i++{
fmt.Printf("arr[%d]=%d\n", i, arr[i])
}
}? ? 打印結(jié)果如下:
[root@localhost mygo]# go run test.go
arr[0]=1
arr[1]=2
arr[2]=3
arr[3]=4
arr[4]=5
4.3 通過(guò)range訪問(wèn)
for i, v := range arr {
fmt.Println(i, v)
}? ??range具有兩個(gè)返回值,第一個(gè)返回值i是元素的數(shù)組下標(biāo),第二個(gè)返回值v是元素的值。
例如:
package main
import(
"fmt"
)
func main(){
arr := [5]int {1, 2, 3, 4, 5}
for i, v := range(arr) {
fmt.Printf("arr[%d]=%d\n", i, v)
}
}
打印結(jié)果如下:
[root@localhost mygo]# go run test.go
arr[0]=1
arr[1]=2
arr[2]=3
arr[3]=4
arr[4]=5
例如:
package main
import(
"fmt"
)
func modify(arr [5]int){
arr[0] = 10
fmt.Println("In modify(), arr values:", arr)
}
func main(){
arr := [5]int{1, 2, 3, 4, 5}
modify(arr)
fmt.Println("In main(), arr values:", arr)
}? ? 輸出結(jié)果為:
[root@localhost mygo]# go run test.go
In modify(), arr values: [10 2 3 4 5]
In main(), arr values: [1 2 3 4 5]
**********************************************************************************************
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/jesseyoung/article/details/36058095
**********************************************************************************************
有疑問(wèn)加站長(zhǎng)微信聯(lián)系(非本文作者)
總結(jié)
以上是生活随笔為你收集整理的php数组在golang,go语言数据类型-数组(array)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python if try except
- 下一篇: Spring Cloud Alibaba