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

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

 更新時間:2017年10月18日 11:15:55   作者:pinecone  
這篇文章主要給大家介紹了關(guān)于golang方法中receiver為指針與不為指針區(qū)別的相關(guān)資料,其實最大的區(qū)別應(yīng)該是指針傳遞的是對像的引用,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

golang的指針receiver和非指針receiver的區(qū)別?最近在看網(wǎng)站有同學提問golang中方法的receiver為指針和不為指針有什么區(qū)別,在這里我以簡單易懂的方法進行說明,幫助剛剛學習golang的同學,下面話不多說了,來一起看看詳細的介紹吧。

方法是什么

其實只要明白這個原理,基本就能理解上面提到的問題.

方法其實就是一種特殊的函數(shù),receiver就是隱式傳入的第一實參.

舉個例子

type test struct{
 name string
}

func (t test) TestValue() {
}

func (t *test) TestPointer() {
}

func main(){
 t := test{}
 
 m := test.TestValue
 m(t)
 
 m1 := (*test).TestPointer
 m1(&t) 
}

是不是很簡單就明白了呢?現(xiàn)在我們來加入代碼,來看看指針和非指針有什么區(qū)別.

type test struct{
 name string
}

func (t test) TestValue() {
 fmt.Printf("%p\n", &t)
}

func (t *test) TestPointer() {
 fmt.Printf("%p\n", t)
}

func main(){
 t := test{}
 //0xc42000e2c0
 fmt.Printf("%p\n", &t)
 
 //0xc42000e2e0
 m := test.TestValue
 m(t)
 
 //0xc42000e2c0
 m1 := (*test).TestPointer
 m1(&t) 

}

估計有的同學已經(jīng)明白了,當不是指針時傳入實參后值發(fā)生了復制.所以每調(diào)用一次TestValue()值就發(fā)生一次復制.

那如果涉及到修改值的操作,結(jié)果會是怎樣呢?

type test struct{
 name string
}

func (t test) TestValue() {
 fmt.Printf("%s\n",t.name)
}

func (t *test) TestPointer() {
 fmt.Printf("%s\n",t.name)
}

func main(){
 t := test{"wang"}

 //這里發(fā)生了復制,不受后面修改的影響
 m := t.TestValue
 
 t.name = "Li"
 m1 := (*test).TestPointer
 //Li
 m1(&t) 
 
 //wang
 m()
}

所以各位同學在編程遇到此類問題一定要注意了.

那這些方法集之間到底是什么關(guān)系呢?這里借用了qyuhen在golang讀書筆記的話,這里也推薦喜歡golang的朋友去閱讀這本書,對加深理解golang有很大的幫助.

       • 類型 T 法集包含全部 receiver T 法。

       • 類型 T 法集包含全部 receiver T + T 法。

       • 如類型 S 包含匿名字段 T,則 S 法集包含 T 法。

       • 如類型 S 包含匿名字段 T,則 S 法集包含 T + T 法。

       • 不管嵌 T 或 T,S 法集總是包含 T + *T 法。

結(jié)語

golang雖然上手簡單易用,但是還是有很多坑.作者在使用golang過程中就遇到很多坑,以后會慢慢提出,歡迎大家一起討論.

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 如何在Golang中運行JavaScript

    如何在Golang中運行JavaScript

    最近寫一個程序,接口返回的數(shù)據(jù)是js格式的,需要通過golang來解析js,所以下面這篇文章主要給大家介紹了關(guān)于如何在Golang中運行JavaScript的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Golang合并yaml文件過程逐步講解

    Golang合并yaml文件過程逐步講解

    之前一直從事java開發(fā),習慣了使用yaml文件的格式,尤其是清晰的層次結(jié)構(gòu)、注釋,下面這篇文章主要給大家介紹了關(guān)于Golang合并yaml文件的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 詳解Go語言中關(guān)于包導入必學的 8 個知識點

    詳解Go語言中關(guān)于包導入必學的 8 個知識點

    這篇文章主要介紹了詳解Go語言中關(guān)于包導入必學的 8 個知識點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Go語言入門13之runtime包案例講解

    Go語言入門13之runtime包案例講解

    這篇文章主要介紹了Go語言入門runtime包相關(guān)知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • GoLang string類型深入分析

    GoLang string類型深入分析

    string 作為 go 語言中的基礎(chǔ)類型,其實有一些需要反復揣摩的,可能是我們使用的場景太簡單,也可能是我們不需要那可憐的一點優(yōu)化來提高性能,對它也就沒那么上心了
    2023-01-01
  • Golang測試框架goconvey進行單元測試流程介紹

    Golang測試框架goconvey進行單元測試流程介紹

    goconvey是一款針對Golang的測試框架,可以管理和運行測試用例,同時提供了豐富的斷言函數(shù),并支持很多Web界面特性,這篇文章主要介紹了使用goconvey進行單元測試流程,感興趣的同學可以參考下文
    2023-05-05
  • Go語言Telnet回音服務(wù)器的實現(xiàn)

    Go語言Telnet回音服務(wù)器的實現(xiàn)

    這篇文章主要介紹了Go語言Telnet回音服務(wù)器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 如何使用大學教育郵箱下載golang等軟件(推薦)

    如何使用大學教育郵箱下載golang等軟件(推薦)

    這篇文章主要介紹了如何使用大學教育郵箱下載goland等軟件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Go語言的文件操作代碼匯總

    Go語言的文件操作代碼匯總

    本文給大家匯總介紹了go語言中的文件操作的代碼,包括文件的讀寫,文件的新建打開和刪除等,希望對大家學習go語言能夠有所幫助
    2018-10-10
  • Go語言中兩個比較流行的緩存庫使用示例

    Go語言中兩個比較流行的緩存庫使用示例

    緩存是計算機科學中的一個重要概念,設(shè)想某個組件需要訪問外部資源,它向外部源請求資源,接收并使用資源,這些步驟都需要花費時間,下面這篇文章主要給大家介紹了關(guān)于Go語言中兩個比較流行的緩存庫使用的相關(guān)資料,需要的朋友可以參考下
    2024-04-04

最新評論