真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go語(yǔ)言的數(shù)組怎么用

本篇內(nèi)容介紹了“Go語(yǔ)言的數(shù)組怎么用”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站主要從事網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)五通橋,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

數(shù)組變量的定義

我們先試一下只申明類型,不賦初值。這時(shí)編譯器會(huì)給數(shù)組默認(rèn)賦上「零值」。數(shù)組的零值就是所有內(nèi)部元素的零值。

package main

import "fmt"

func main() {
    var a [9]int
    fmt.Println(a)
}

------------
[0 0 0 0 0 0 0 0 0]


下面我們看看另外三種變量定義的形式, 效果都是一樣的

package main

import "fmt"

func main() {
    var a = [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    var b [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    c := [8]int{1, 2, 3, 4, 5, 6, 7, 8}
    fmt.Println(a)
    fmt.Println(b)
    fmt.Println(c)
}

---------------------
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9 10]
[1 2 3 4 5 6 7 8]

數(shù)組的訪問

接下來我們使用下標(biāo)來簡(jiǎn)單操作一下數(shù)組,這個(gè)數(shù)組里存的是數(shù)字的平方值

package main

import "fmt"

func main() {
    var squares [9]int
    for i := 0; i < len(squares); i++ {
        squares[i] = (i + 1) * (i + 1)
    }
    fmt.Println(squares)
}

--------------------
[1 4 9 16 25 36 49 64 81]

數(shù)組的下標(biāo)越界檢查(高階知識(shí))

上面的代碼中我們注意到可以使用內(nèi)置函數(shù) len() 來直接獲取數(shù)組的長(zhǎng)度。數(shù)組的長(zhǎng)度是編譯期確定的,當(dāng)我們使用 len() 函數(shù)訪問數(shù)組的長(zhǎng)度屬性時(shí),編譯器在背后偷偷把它替換成了整數(shù)值。

package main

import "fmt"

func main() {
    var a = [5]int{1,2,3,4,5}
    a[101] = 255
    fmt.Println(a)
}

-----
./main.go:7:3: invalid array index 101 (out of bounds for 5-element array)


上面的代碼運(yùn)行結(jié)果說明了 Go 語(yǔ)言會(huì)對(duì)數(shù)組訪問下標(biāo)越界進(jìn)行編譯器檢查。有一個(gè)重要的問題是,如果下標(biāo)是一個(gè)變量,Go 是如何檢查下標(biāo)越界呢?變量需要在運(yùn)行時(shí)才可以決定是否越界,Go 是如何辦到的呢?

package main

import "fmt"

func main() {
    var a = [5]int{1,2,3,4,5}
    var b = 101
    a[b] = 255
    fmt.Println(a)
}

------------
panic: runtime error: index out of range

goroutine 1 [running]:
main.main()
    /Users/qianwp/go/src/github.com/pyloque/practice/main.go:8 +0x3d
exit status 2


答案是 Go 會(huì)在編譯后的代碼中插入下標(biāo)越界檢查的邏輯,所以數(shù)組的下標(biāo)訪問效率是要打折扣的,比不得 C 語(yǔ)言的數(shù)組訪問性能。

數(shù)組賦值

同樣的子元素類型并且是同樣長(zhǎng)度的數(shù)組才可以相互賦值,否則就是不同的數(shù)組類型,不能賦值。數(shù)組的賦值本質(zhì)上是一種淺拷貝操作,賦值的兩個(gè)數(shù)組變量的值不會(huì)共享。

package main

import "fmt"

func main() {
    var a = [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    var b [9]int
    b = a
    a[0] = 12345
    fmt.Println(a)
    fmt.Println(b)
}

--------------------------
[12345 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]


從上面代碼的運(yùn)行結(jié)果中可以看出賦值后兩個(gè)數(shù)組并沒有共享內(nèi)部元素。如果數(shù)組的長(zhǎng)度很大,那么拷貝操作是有一定的開銷的,使用的時(shí)候一定需要注意。下面我們嘗試使用不同長(zhǎng)度的數(shù)組賦值會(huì)有什么結(jié)果

package main

import "fmt"

func main() {
    var a = [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    var b [10]int
    b = a
    fmt.Println(b)
}

--------------------------
./main.go:8:4: cannot use a (type [9]int) as type [10]int in assignment


可以看出不同長(zhǎng)度的數(shù)組之間賦值是禁止的,因?yàn)樗鼈儗儆诓煌念愋汀?/p>

數(shù)組的遍歷

數(shù)組除了可以使用下標(biāo)進(jìn)行遍歷之外,還可以使用 range 關(guān)鍵字來遍歷,range 遍歷提供了下面兩種形式。

package main

import "fmt"

func main() {
    var a = [5]int{1,2,3,4,5}
    for index := range a {
  fmt.Println(index, a[index])
 }
 for index, value := range a {
        fmt.Println(index, value)
    }
}

------------
0 1
1 2
2 3
3 4
4 5
0 1
1 2
2 3
3 4
4 5

“Go語(yǔ)言的數(shù)組怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


當(dāng)前名稱:Go語(yǔ)言的數(shù)組怎么用
標(biāo)題來源:http://weahome.cn/article/gscigh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部