Golang使用slice時的問題

2021-10-01 14:19:06 字數 1103 閱讀 4937

golang中所有型別在傳參的時候都是值傳遞,但golang中依然有4種引用型別,分別為slice、map、channel以及inte***ce{}。我們在傳遞的時候,若要改變引數的值,需要傳入該值的指標,對於引用型別則沒有這個限制。但在使用的時候也存在一些問題,需要特別注意。

func

(this *mysqldb)

find

(model inte***ce)(

inte***ce

,error

) issuccess, ret := dodb.

db_use

(strsql,

"",db.mysql_opt_select,

"mysql")if

!issuccess

var modelret [

]inte***ce

for i :=

0; i <

len(ret.ret)

; i++

for j, row :=

range ret.ret

process

(&val, col)}}

else}}

}}return modelret,

nil}

在上面的**中,傳入的引數是乙個inte***ce型別的變數,傳出引數是同型別的slice變數。由於傳出引數的長度只有在執行是才知道,所以需要動態的生成乙個slice。因此我先根據長度預先生成好slice,**如下。

var modelret [

]inte***ce

for i :=

0; i <

len(ret.ret)

; i++

var modelret [

]inte***ce

for i :=

0; i <

len(ret.ret)

; i++

這樣就可以保證我們每次新增進去的都是乙個新的元素啦。

最重要的就是怎麼生成乙個新的元素,在2中我們已經實現了,後面只需要利用反射逐個賦值就好了。

Golang入門學習 Slice的初步使用

go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大 切片是一種方便 靈活且強大的包裝器。切片本身沒有任何資料。它們只是對現有陣列的...

分析golang的slice排序

今天寫 牽扯到給乙個slice排序的問題,發現go的sort包裡支援自定義排序,果斷拿來用了。sort.slice pricelist,func i,j int bool 上面這個是使用sort.slice 的例子。在此之前,先講講基礎的sort方法,type inte ce inte ce fun...

golang 陣列 slice 亂序

陣列亂序 方法1.sliceoutoforder 選定隨機數r 將下標r和下邊i交換,i 就是和當前最後一位交換 方法2.rand.perm 陣列長度 將原陣列下標按照隨機出來的資料賦值給另一陣列 package main import fmt import math rand import tim...