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

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

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

1 概述

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

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

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

2案例

2.1 值類型

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

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

在賦值時(shí),只是把a(bǔ)rray1的內(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)
}

運(yùn)行結(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)使用一個(gè)切片初始化另一個(gè)切片時(shí),兩個(gè)切片實(shí)際是同一個(gè)。

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

運(yùn)行結(jié)果:

slice1:[1]
slice2:[1]

3 golang中的struct類型

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

但是這有別于java,因?yàn)閟truct在方法中傳參時(shí)是值類型而非引用類型,所以當(dāng)需要在方法內(nèi)改變這個(gè)對象的字段值時(shí),應(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)存的大量拷貝)。

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

總結(jié)

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

相關(guān)文章

  • 一文詳解Golang中的匿名變量

    一文詳解Golang中的匿名變量

    匿名變量是一種特殊類型的變量,可以簡化代碼并提高可讀性,本文將為大家詳細(xì)介紹一下golang中匿名變量的定義、特性和使用方法,需要的可以參考下
    2023-09-09
  • 詳解Golang time包中的結(jié)構(gòu)體time.Time

    詳解Golang time包中的結(jié)構(gòu)體time.Time

    在日常開發(fā)過程中,會頻繁遇到對時(shí)間進(jìn)行操作的場景,使用 Golang 中的 time 包可以很方便地實(shí)現(xiàn)對時(shí)間的相關(guān)操作,本文先講解一下 time 包中的結(jié)構(gòu)體 time.Time,需要的朋友可以參考下
    2023-07-07
  • Go語言題解LeetCode463島嶼的周長示例詳解

    Go語言題解LeetCode463島嶼的周長示例詳解

    這篇文章主要為大家介紹了Go語言題解LeetCode463島嶼的周長示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang Gin局部和全局中間件使用詳解

    Golang Gin局部和全局中間件使用詳解

    中間件是放在客戶端和服務(wù)端的中間,當(dāng)你的客戶端對某個(gè)接口發(fā)起一個(gè)請求,但是在到達(dá)接口2之前,這里是有一層中間件的處理。本文詳細(xì)介紹了Golang Gin局部、全局中間件使用方法,感興趣的同學(xué)可以閱讀本文
    2023-04-04
  • 在goland中讀取tpl文件的圖文操作

    在goland中讀取tpl文件的圖文操作

    這篇文章主要介紹了在goland中讀取tpl文件的圖文操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言常見錯(cuò)誤接口污染解決分析

    Go語言常見錯(cuò)誤接口污染解決分析

    這篇文章主要為大家介紹了Go語言常見錯(cuò)誤接口污染解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • go?mod?tidy報(bào)錯(cuò):zip:?not?a?valid?zip?file解決辦法

    go?mod?tidy報(bào)錯(cuò):zip:?not?a?valid?zip?file解決辦法

    這篇文章主要給大家介紹了關(guān)于go?mod?tidy報(bào)錯(cuò):zip:?not?a?valid?zip?file的解決辦法,go mod是進(jìn)行代碼管理,這錯(cuò)誤是因?yàn)楸镜胤种Ш瓦h(yuǎn)程分支沖突,本文通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 淺談go中cgo的幾種使用方式

    淺談go中cgo的幾種使用方式

    本文主要介紹了淺談go中cgo的幾種使用方式,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • go 協(xié)程返回值處理操作

    go 協(xié)程返回值處理操作

    這篇文章主要介紹了go 協(xié)程返回值處理操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go Gin實(shí)現(xiàn)文件上傳下載的示例代碼

    Go Gin實(shí)現(xiàn)文件上傳下載的示例代碼

    這篇文章主要介紹了Go Gin實(shí)現(xiàn)文件上傳下載的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評論