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

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

Go語言的數(shù)組怎么用-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)客戶idc服務(wù)中心,提供內(nèi)蒙古服務(wù)器托管、成都服務(wù)器、成都主機托管、成都雙線服務(wù)器等業(yè)務(wù)的一站式服務(wù)。通過各地的服務(wù)中心,我們向成都用戶提供優(yōu)質(zhì)廉價的產(chǎn)品以及開放、透明、穩(wěn)定、高性價比的服務(wù),資深網(wǎng)絡(luò)工程師在機房提供7*24小時標(biāo)準(zhǔn)級技術(shù)保障。

數(shù)組變量的定義

我們先試一下只申明類型,不賦初值。這時編譯器會給數(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)來簡單操作一下數(shù)組,這個數(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)越界檢查(高階知識)

上面的代碼中我們注意到可以使用內(nèi)置函數(shù) len() 來直接獲取數(shù)組的長度。數(shù)組的長度是編譯期確定的,當(dāng)我們使用 len() 函數(shù)訪問數(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)


上面的代碼運行結(jié)果說明了 Go 語言會對數(shù)組訪問下標(biāo)越界進行編譯器檢查。有一個重要的問題是,如果下標(biāo)是一個變量,Go 是如何檢查下標(biāo)越界呢?變量需要在運行時才可以決定是否越界,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 會在編譯后的代碼中插入下標(biāo)越界檢查的邏輯,所以數(shù)組的下標(biāo)訪問效率是要打折扣的,比不得 C 語言的數(shù)組訪問性能。

數(shù)組賦值

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

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]


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


可以看出不同長度的數(shù)組之間賦值是禁止的,因為它們屬于不同的類型。

數(shù)組的遍歷

數(shù)組除了可以使用下標(biāo)進行遍歷之外,還可以使用 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語言的數(shù)組怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


當(dāng)前題目:Go語言的數(shù)組怎么用-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://weahome.cn/article/gissj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部