GO語言學(xué)習(xí)筆記2018-09-04

1 go語言在參數(shù)傳遞中只有值傳遞一種方式

package main

import "fmt"

func swap(a, b int) (int, int) {

? ? ? ? ? ? ?return b, a

}

func main() {

? ? ? ? ? ? ? ? ?a, b := 3, 4? ? ? //賦值

? ? ? ? ? ? ? ? a, b = swap(a, b) //接住返回的值

? ? ? ? ? ? ? ? fmt.Println(a, b)

}

輸出結(jié)果為: 4 3?

上面的函數(shù) swap也可以寫成以下形式:

func sawp(a,b *int) {

? ? ? ? *a,*b = *b,*a

}

調(diào)用形式為:

a,b := 3,4

swap(&a,&b)

fmt.Println(a,b)

2 go語言與數(shù)組表示:

package main

import "fmt"

func main() {

? ? ? ? ? ? var arr1 [5]int? ?// 定義數(shù)組時(shí)需要做到名字和聲明長(zhǎng)度在前,類型在后

? ? ? ? ? ? ? ? ?arr2 := [3]int{1, 2, 3}

? ? ? ? ? ? ? ? ?arr3 := [5]int{2, 4, 6, 8, 10}

? ? ? ? ? ? var grid [4][5]int? ? ? ? ? ? /*這里是二維數(shù)組,需要注意的是表達(dá)式不能寫作: grid:= [4][5] int .程序會(huì)報(bào)錯(cuò)*/

? ? ? ? ? ? fmt.Println(arr1, arr2, arr3, grid)

? ? ? ? ? ?for _, v := range arr3 {

? ? ? ? ? ? ? ? ? ? ? ? ? ?fmt.Println(v)

/*注意range的用法,range 是一個(gè)關(guān)鍵字,可以用來遍歷數(shù)組,這里的下劃線表示省略一個(gè)變量比如本來是寫做 for i,v := range arr3{? ?fmt.Println(i,v)}的,現(xiàn)在我不想用i了,便可以用_來代替。就如同該式*/

? ? ? ? ? ? ? }

}

輸出結(jié)果見 jc22.go

3?.slice

package main

import "fmt"

func main() {

? ? ? ? ? ? ? ? ? ? ? arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}

? ? ? ? ? ? ? ? ? ? ? s := arr[2:6]

/*在這里[2:6]的形式表示slice(切片),其中計(jì)算機(jī)語言里的[。。。]一般表示左閉右開*/

? ? ? ? ? ? ? ? ?fmt.Println("arr[2:6]=", s)

}

故該程序輸出結(jié)果為:arr[2,6]=2,3,4,5

基本概念:slice可以理解為是一個(gè)數(shù)據(jù)結(jié)構(gòu),它可以理解為是對(duì)下層數(shù)組的一個(gè)view,舉一個(gè)程序例子如下:


其輸出結(jié)果如下:?


我們作出以下解釋:現(xiàn)在的s1=[2,3,4,5,6,7],我們?cè)趕1的基礎(chǔ)上進(jìn)行updateSlice函數(shù)后,里面的s[0]變?yōu)?00,注意這時(shí)原來的2的位置也變?yōu)?00了,故s1=[100,3,4,5,6,7],再對(duì)s2進(jìn)行同樣的操作,這時(shí)s2=[100,1, 100,3,4,5,6,7].而原數(shù)組也變?yōu)閇100,1,100,3,4,5,6,7]? ? ??

我們?cè)賮砜磖eslice操作,經(jīng)過再一次reslice,s2=[100,1,100,3,4],在經(jīng)過一次reclice,變?yōu)閇100,3,4].

現(xiàn)在我們?cè)偌由钜幌聦?duì)slice的理解

從圖中我們可以看到陰影部分為slice隱藏的數(shù)據(jù),再一次slice時(shí)如果沒有超出陰影的長(zhǎng)度(你切多了)我們就可以取到那里的值。

例子:


輸出結(jié)果為:


我們?cè)谶@里加入了Extending slice,并把值變回最初的樣子,以便我們觀察:

s1=[2,3,4,5],再s1基礎(chǔ)上進(jìn)行切片得到s2=[5,6].。但是這里s1只顯示了[2,3,4,5],沒有顯示的部分是s[4]=6,s[5]=7,在S2切片時(shí),可以切到后面(也就是圖中陰影部分)的值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容