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

go之值類型與引用類型使用及說明

 更新時間:2025年07月03日 10:42:56   作者:alden_ygq  
這篇文章主要介紹了go之值類型與引用類型使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1 概述

Go語言的數(shù)據(jù)類型有 值類型 與 引用類型 兩種。

  • 值類型:在初始化、賦值時,兩個變量互不影響;參數(shù)傳遞時,傳遞的是一個副本
  • 引用類型:在初始化、賦值時,兩個變量實際是同一個;參數(shù)傳遞時,傳遞的是變量本身。

在Go語言中,只有slice、map、interface、channel是引用類型,其他的都是值類型。

2案例

2.1 值類型

數(shù)組array類型是值類型,那么在使用相同的類型的變量初始化另一個變量時,兩個變量互不影響,如下array1與array2是兩個不同的數(shù)組:

array1 := [10]int64{}
array2 := array1

在賦值時,只是把array1的內(nèi)容拷貝到array2中,array1的修改不會再影響array2

package main
import (
	"fmt"
)
func main() {
	array1 := [10]int64{1,2}
	array2 := [10]int64{}
	array2 = array1
	array1[0] = 100         // array2[0] 不會變
	fmt.Printf("array1:%v\n",array1)
        fmt.Printf("array2:%v\n",array2)
}

運行結(jié)果:

array1:[100 2 0 0 0 0 0 0 0 0]
array2:[1 2 0 0 0 0 0 0 0 0]

2.2 引用類型

切片是引用類型,所以當(dāng)使用一個切片初始化另一個切片時,兩個切片實際是同一個。

package main
import (
	"fmt"
)
func main() {
	slice1 := make([]int64, 1, 10)    // 初始化一個len為1,cap為10的切片
	slice2 := slice1
	slice1[0] = 1   // slice2[0] 也會變成1
	fmt.Printf("slice1:%v\n",slice1)
	fmt.Printf("slice2:%v\n",slice2)
}

運行結(jié)果:

slice1:[1]
slice2:[1]

3 golang中的struct類型

Golang中沒有class關(guān)鍵字來定義類,對于事物的抽象以struct來定義,因此一個struct變量可以被看做一個類實例。

但是這有別于java,因為struct在方法中傳參時是值類型而非引用類型,所以當(dāng)需要在方法內(nèi)改變這個對象的字段值時,應(yīng)該使用的是struct變量的指針,而非struct變量。

type Student struct{
         Name string
}
 
func (s * Student) Set(name string){
              s.Name = name
}
func (s Student) Get()string{
           return s.Name
}

由上可知:

如果方法內(nèi)部會修改當(dāng)前對象的字段或改變其值,需要用指針。

由于值傳遞是(內(nèi)存)復(fù)制,因此,如果對象比較大,應(yīng)該使用指針(地址),避免內(nèi)存拷貝(值類型等變量指向內(nèi)存中的值,如果有值類型變量存放大量元素,或造成內(nèi)存的大量拷貝)。

注意:不見得使用指針就一定好過傳值,因為按照 Go 的內(nèi)存管理策略,涉及指針和引用的對象會被分配到 GC Heap 上。如果對象很 “小”,顯然要比在棧上進行值拷貝 “耗費” 更多。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Go語言錯誤和異常實現(xiàn)

    Go語言錯誤和異常實現(xiàn)

    本文介紹了Go語言的錯誤處理機制,包括通過返回error類型顯式處理錯誤,以及使用panic和recover應(yīng)對嚴(yán)重異常,感興趣的可以了解一下
    2025-10-10
  • golang:json 反序列化的[]和nil操作

    golang:json 反序列化的[]和nil操作

    這篇文章主要介紹了golang:json 反序列化的[]和nil操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理

    詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理

    這篇文章主要介紹了詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Golang filepath包常用函數(shù)詳解

    Golang filepath包常用函數(shù)詳解

    本文介紹與文件路徑相關(guān)包,該工具包位于path/filepath中,該包試圖與目標(biāo)操作系統(tǒng)定義的文件路徑兼容。本文介紹一些常用函數(shù),如獲取文件絕對路徑,獲取文件名或目錄名、遍歷文件、分割文件路徑、文件名模式匹配等函數(shù),并給具體示例進行說明
    2023-02-02
  • Golang 如何判斷數(shù)組某個元素是否存在 (isset)

    Golang 如何判斷數(shù)組某個元素是否存在 (isset)

    這篇文章主要介紹了Golang 如何判斷數(shù)組某個元素是否存在 (isset),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 淺談golang的http cookie用法

    淺談golang的http cookie用法

    本篇文章主要介紹了golang的http cookie用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 聊聊Golang性能分析工具pprof的使用

    聊聊Golang性能分析工具pprof的使用

    對于線上穩(wěn)定運行的服務(wù)來說,?可能會遇到?cpu、mem?利用率升高的問題,那我們就需要使用?pprof?工具來進行性能分析,所以本文就來和大家講講pprof的具體使用吧
    2023-05-05
  • Go實現(xiàn)生產(chǎn)隨機密碼的示例代碼

    Go實現(xiàn)生產(chǎn)隨機密碼的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Go實現(xiàn)生產(chǎn)隨機密碼的,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2023-09-09
  • Go語言中一些不常見的命令參數(shù)詳解

    Go語言中一些不常見的命令參數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Go語言中一些不常見的命令參數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • 一文探索Go中的函數(shù)使用方式

    一文探索Go中的函數(shù)使用方式

    在編程中,函數(shù)是基本構(gòu)建塊之一,Go語言以其簡潔明了的函數(shù)定義和調(diào)用語法而聞名,所以本文就來和大家聊聊Go中的函數(shù)概念及使用,感興趣的可以了解下
    2023-09-09

最新評論

伊宁县| 南雄市| 普兰县| 财经| 东安县| 昭通市| 视频| 唐海县| 河北省| 育儿| 弥勒县| 视频| 科技| 阿合奇县| 苍南县| 苍山县| 荃湾区| 石家庄市| 桦甸市| 磐安县| 普格县| 巨野县| 宾阳县| 定陶县| 睢宁县| 永善县| 含山县| 万荣县| 仪陇县| 富锦市| 札达县| 庆元县| 正宁县| 浏阳市| 广宗县| 团风县| 武邑县| 石门县| 灵丘县| 天等县| 股票|