亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang數組的傳遞詳解

 更新時間:2019年03月07日 17:08:52   作者:benben_2015  
今天小編就為大家分享一篇關于Golang數組的傳遞詳解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

概念介紹

數組與切片

數組是具有相同唯一類型的一組已編號且長度固定的數據項序列。數組長度最大為2Gb,它是值類型。切片是對數組一個連續(xù)片段的引用,所以切片是一個引用類型。

按值傳遞和按引用傳遞

Go語言中函數的參數有兩種傳遞方式,按值傳遞和按引用傳遞。Go默認使用按值傳遞來傳遞參數,也就是傳遞參數的副本。在函數中對副本的值進行更改操作時,不會影響到原來的變量。

按引用傳遞其實也可以稱作”按值傳遞”,只不過該副本是一個地址的拷貝,通過它可以修改這個值所指向的地址上的值。

Go語言中,在函數調用時,引用類型(slice、map、interface、channel)都默認使用引用傳遞。

數組傳遞時的缺點

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

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

如何避免

如上面介紹的,有兩種方法,第一種利用指針,即引用傳遞;第二種使用切片,因為切片是引用類型,默認會使用引用傳遞。

使用指針進行傳遞

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
}

使用切片進行傳遞

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

相關文章

  • go的websocket實現原理與用法詳解

    go的websocket實現原理與用法詳解

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

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

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

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

    在Go中,可以通過使用database/sql包的DB類型的Ping方法來檢查數據庫連接的可用性,本文通過示例代碼,演示了如何在連接檢查失敗時進行重試,感興趣的朋友一起看看吧
    2023-10-10
  • Go語言正則表達式的使用詳解

    Go語言正則表達式的使用詳解

    正則表達式是一種進行模式匹配和文本操縱的功能強大的工具。這篇文章主要介紹了Go正則表達式使用,本文給大家介紹的非常詳細,對大家的工作或學習具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 詳解go語言json的使用技巧

    詳解go語言json的使用技巧

    這篇文章主要介紹了詳解go語言json的使用技巧,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Go語言實現互斥鎖、隨機數、time、List

    Go語言實現互斥鎖、隨機數、time、List

    這篇文章主要介紹了Go語言實現互斥鎖、隨機數、time、List的相關資料,需要的朋友可以參考下
    2018-10-10
  • Golang中漏洞數據庫的使用詳解

    Golang中漏洞數據庫的使用詳解

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

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

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

    詳解Golang如何實現一個環(huán)形緩沖器

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

    Go語言WaitGroup使用時需要注意的坑

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

最新評論