欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang數(shù)組的傳遞詳解

 更新時(shí)間:2019年03月07日 17:08:52   作者:benben_2015  
今天小編就為大家分享一篇關(guān)于Golang數(shù)組的傳遞詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

概念介紹

數(shù)組與切片

數(shù)組是具有相同唯一類(lèi)型的一組已編號(hào)且長(zhǎng)度固定的數(shù)據(jù)項(xiàng)序列。數(shù)組長(zhǎng)度最大為2Gb,它是值類(lèi)型。切片是對(duì)數(shù)組一個(gè)連續(xù)片段的引用,所以切片是一個(gè)引用類(lèi)型。

按值傳遞和按引用傳遞

Go語(yǔ)言中函數(shù)的參數(shù)有兩種傳遞方式,按值傳遞和按引用傳遞。Go默認(rèn)使用按值傳遞來(lái)傳遞參數(shù),也就是傳遞參數(shù)的副本。在函數(shù)中對(duì)副本的值進(jìn)行更改操作時(shí),不會(huì)影響到原來(lái)的變量。

按引用傳遞其實(shí)也可以稱(chēng)作”按值傳遞”,只不過(guò)該副本是一個(gè)地址的拷貝,通過(guò)它可以修改這個(gè)值所指向的地址上的值。

Go語(yǔ)言中,在函數(shù)調(diào)用時(shí),引用類(lèi)型(slice、map、interface、channel)都默認(rèn)使用引用傳遞。

數(shù)組傳遞時(shí)的缺點(diǎn)

一般情況下,傳遞指針的消耗比傳遞副本的少,尤其是當(dāng)數(shù)組特別大時(shí)。具體原因是:

  • 值傳遞需要完整的復(fù)制初始數(shù)組并將這份拷貝放到棧中,這將耗費(fèi)大量運(yùn)行時(shí)間,因而值傳遞方式的效率比較低。
  • 初始數(shù)組的拷貝需要占用額外的內(nèi)存空間(棧中的內(nèi)存)
  • 編譯程序需要專(zhuān)門(mén)產(chǎn)生一部分用來(lái)復(fù)制初始數(shù)組的代碼,這將使程序變大。

如何避免

如上面介紹的,有兩種方法,第一種利用指針,即引用傳遞;第二種使用切片,因?yàn)榍衅且妙?lèi)型,默認(rèn)會(huì)使用引用傳遞。

使用指針進(jìn)行傳遞

package main
import "fmt"
func main() {
  var arr = [5]int{1, 2, 3, 4, 5}
  fmt.Println(sum(&arr))
}
func sum(arr *[5]int) int {
  s := 0
  for i := 0; i < len(arr); i++ {
    s += arr[i]
  }
  return s
}

使用切片進(jìn)行傳遞

package main
import "fmt"
func main() {
  var arr = [5]int{1, 2, 3, 4, 5}
  fmt.Println(sum(arr[:]))
}
func sum(arr []int) int {
  s := 0
  for i := 0; i < len(arr); i++ {
    s += arr[i]
  }
  return s
}

最后一種方法通常比較常用。

參考文章

1. the way to go

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • go的websocket實(shí)現(xiàn)原理與用法詳解

    go的websocket實(shí)現(xiàn)原理與用法詳解

    這篇文章主要介紹了go的websocket實(shí)現(xiàn)原理與用法,詳細(xì)分析了websocket的功能、原理及Go語(yǔ)言實(shí)現(xiàn)websocket的相關(guān)技巧,需要的朋友可以參考下
    2016-07-07
  • B站新一代 golang規(guī)則引擎gengine基礎(chǔ)語(yǔ)法

    B站新一代 golang規(guī)則引擎gengine基礎(chǔ)語(yǔ)法

    這篇文章主要為大家介紹了B站新一代 golang規(guī)則引擎gengine基礎(chǔ)語(yǔ)法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • golang連接池檢查連接失敗時(shí)如何重試(示例代碼)

    golang連接池檢查連接失敗時(shí)如何重試(示例代碼)

    在Go中,可以通過(guò)使用database/sql包的DB類(lèi)型的Ping方法來(lái)檢查數(shù)據(jù)庫(kù)連接的可用性,本文通過(guò)示例代碼,演示了如何在連接檢查失敗時(shí)進(jìn)行重試,感興趣的朋友一起看看吧
    2023-10-10
  • Go語(yǔ)言正則表達(dá)式的使用詳解

    Go語(yǔ)言正則表達(dá)式的使用詳解

    正則表達(dá)式是一種進(jìn)行模式匹配和文本操縱的功能強(qiáng)大的工具。這篇文章主要介紹了Go正則表達(dá)式使用,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳解go語(yǔ)言json的使用技巧

    詳解go語(yǔ)言json的使用技巧

    這篇文章主要介紹了詳解go語(yǔ)言json的使用技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Go語(yǔ)言實(shí)現(xiàn)互斥鎖、隨機(jī)數(shù)、time、List

    Go語(yǔ)言實(shí)現(xiàn)互斥鎖、隨機(jī)數(shù)、time、List

    這篇文章主要介紹了Go語(yǔ)言實(shí)現(xiàn)互斥鎖、隨機(jī)數(shù)、time、List的相關(guān)資料,需要的朋友可以參考下
    2018-10-10
  • Golang中漏洞數(shù)據(jù)庫(kù)的使用詳解

    Golang中漏洞數(shù)據(jù)庫(kù)的使用詳解

    govulncheck是Golang中的漏洞掃描工具,它強(qiáng)大功能的背后,離不開(kāi)?Go?漏洞數(shù)據(jù)庫(kù)(Go?vulnerability?database)的支持,所以本文就來(lái)為大家詳細(xì)講解下?Go?漏洞數(shù)據(jù)庫(kù)相關(guān)的知識(shí)
    2023-09-09
  • go Gin安裝及初始化操作示例

    go Gin安裝及初始化操作示例

    這篇文章主要介紹了gin安裝及初始化,修改啟動(dòng)端口,get/post?請(qǐng)求參數(shù),模型綁定shouldbind,自定義驗(yàn)證器/表單驗(yàn)證,等操作步驟,有需要的朋友可以借鑒參考下
    2022-04-04
  • 詳解Golang如何實(shí)現(xiàn)一個(gè)環(huán)形緩沖器

    詳解Golang如何實(shí)現(xiàn)一個(gè)環(huán)形緩沖器

    環(huán)形緩沖器(ringr?buffer)是一種用于表示一個(gè)固定尺寸、頭尾相連的緩沖區(qū)的數(shù)據(jù)結(jié)構(gòu),適合緩存數(shù)據(jù)流。本文將利用Golang實(shí)現(xiàn)一個(gè)環(huán)形緩沖器,需要的可以參考一下
    2022-09-09
  • Go語(yǔ)言WaitGroup使用時(shí)需要注意的坑

    Go語(yǔ)言WaitGroup使用時(shí)需要注意的坑

    Go語(yǔ)言中WaitGroup的用途是它能夠一直等到所有的goroutine執(zhí)行完成,并且阻塞主線程的執(zhí)行,直到所有的goroutine執(zhí)行完成。之前一直使用也沒(méi)有問(wèn)題,但最近通過(guò)同事的一段代碼引起了關(guān)于WaitGroup的注意,下面這篇文章就介紹了WaitGroup使用時(shí)需要注意的坑及填坑。
    2016-12-12

最新評(píng)論