最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

概念介紹

數(shù)組與切片

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

按值傳遞和按引用傳遞

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

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

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

數(shù)組傳遞時的缺點

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

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

如何避免

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

使用指針進行傳遞

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路由注冊方法詳解

    Go路由注冊方法詳解

    Go語言中,http.NewServeMux()和http.HandleFunc()是兩種不同的路由注冊方式,前者創(chuàng)建獨立的ServeMux實例,適合模塊化和分層路由,靈活性高,但啟動服務器時需要顯式指定,后者使用全局默認的http.DefaultServeMux,適合簡單場景,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • Go anko實現(xiàn)支持腳本語言

    Go anko實現(xiàn)支持腳本語言

    anko是一個可以讓 Go 項目支持腳本語言的小工具,換句話說,就是可以給 Go 項目加點“腳本魔法”,下面就跟隨小編一起來學習一下他的具體使用吧
    2024-11-11
  • Go的os/exec執(zhí)行超時導致程序死機的解決方案

    Go的os/exec執(zhí)行超時導致程序死機的解決方案

    這篇文章主要介紹了Go的os/exec執(zhí)行超時導致程序死機的幾種解決方案,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • 一文詳解go同步協(xié)程的必備工具WaitGroup

    一文詳解go同步協(xié)程的必備工具WaitGroup

    這篇文章主要為大家介紹了一文詳解go同步協(xié)程的必備工具WaitGroup使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • golang方法中receiver為指針與不為指針的區(qū)別詳析

    golang方法中receiver為指針與不為指針的區(qū)別詳析

    這篇文章主要給大家介紹了關于golang方法中receiver為指針與不為指針區(qū)別的相關資料,其實最大的區(qū)別應該是指針傳遞的是對像的引用,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • 解決Goland中利用HTTPClient發(fā)送請求超時返回EOF錯誤DEBUG

    解決Goland中利用HTTPClient發(fā)送請求超時返回EOF錯誤DEBUG

    這篇文章主要介紹了解決Goland中利用HTTPClient發(fā)送請求超時返回EOF錯誤DEBUG,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解Golang中的Mutex并發(fā)原語

    詳解Golang中的Mutex并發(fā)原語

    Mutex?是?Go?語言中互斥鎖的實現(xiàn),它是一種同步機制,用于控制多個?goroutine?之間的并發(fā)訪問。本文將著重介紹?Go?的?Mutex?并發(fā)原語,希望對大家有所幫助
    2023-03-03
  • 詳解Go語言的內存模型及堆的分配管理

    詳解Go語言的內存模型及堆的分配管理

    這篇筆記主要介紹Go內存分配和Go內存管理,會輕微涉及內存申請和釋放,以及Go垃圾回收,文中有詳細的代碼示例以及圖片介紹,需要的朋友可以參考下
    2023-05-05
  • Go語言中循環(huán)Loop的用法介紹

    Go語言中循環(huán)Loop的用法介紹

    這篇文章介紹了Go語言中循環(huán)Loop的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • golang實現(xiàn)頁面靜態(tài)化操作的示例代碼

    golang實現(xiàn)頁面靜態(tài)化操作的示例代碼

    這篇文章主要介紹了golang實現(xiàn)頁面靜態(tài)化操作的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02

最新評論

台北市| 乐至县| 南木林县| 崇文区| 上思县| 思茅市| 安岳县| 图木舒克市| 库伦旗| 兴和县| 陵川县| 昔阳县| 贵南县| 都昌县| 德化县| 陈巴尔虎旗| 民和| 基隆市| 康马县| 曲靖市| 临桂县| 广宗县| 庆城县| 会昌县| 景东| 齐河县| 长岭县| 湖南省| 绩溪县| 镇赉县| 洞口县| 吴忠市| 运城市| 湟源县| 天长市| 彭泽县| 井研县| 茶陵县| 电白县| 浠水县| 布尔津县|