校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > golang中值類型/指針類型的變量區(qū)別總結

golang中值類型/指針類型的變量區(qū)別總結

熱門標簽:阿里云ai電話機器人 釘釘有地圖標注功能嗎 鄭州亮點科技用的什么外呼系統 惠州電銷防封電話卡 黃岡人工智能電銷機器人哪個好 汕頭小型外呼系統 浙江高頻外呼系統多少錢一個月 濱州自動電銷機器人排名 建造者2地圖標注

前言

值類型:所有像int、float、bool和string這些類型都屬于值類型,使用這些類型的變量直接指向存在內存中的值,值類型的變量的值存儲在棧中。當使用等號=將一個變量的值賦給另一個變量時,如 j = i ,實際上是在內存中將 i 的值進行了拷貝。可以通過 i 獲取變量 i 的內存地址

指針類型:簡單地說go語言的指針類型和C/C++的指針類型用法是一樣的,除了出去安全性的考慮,go語言增加了一些限制,包括如下幾條:

  • 不同類型的指針不能互相轉化,例如*int, int32, 以及int64
  • 任何普通指針類型*T和uintptr之間不能互相轉化
  • 指針變量不能進行運算, 比如C/C++里面的++, --運算

下面將給大家詳細介紹golang中值類型/指針類型的變量的一些區(qū)別,下面話不多說了,來一起看看詳細的介紹吧。

值類型的變量和指針類型的變量

先聲明一個結構體:

type T struct {
 Name string
}
func (t T) M1() {
 t.Name = "name1"
}
func (t *T) M2() {
 t.Name = "name2"
}

M1() 的接收者是值類型 T, M2() 的接收者是值類型 *T , 兩個方法內都是改變Name值。

下面聲明一個 T 類型的變量,并調用 M1()M2()

 t1 := T{"t1"}
 fmt.Println("M1調用前:", t1.Name)
 t1.M1()
 fmt.Println("M1調用后:", t1.Name)
 fmt.Println("M2調用前:", t1.Name)
 t1.M2()
 fmt.Println("M2調用后:", t1.Name)

輸出結果為:

M1調用前: t1

M1調用后: t1

M2調用前: t1

M2調用后: name2

下面猜測一下go會怎么處理。

先來約定一下:接收者可以看作是函數的第一個參數,即這樣的: func M1(t T) , func M2(t *T) 。 go不是面向對象的語言,所以用那種看起來像面向對象的語法來理解可能有偏差。

當調用 t1.M1() 時相當于 M1(t1) ,實參和行參都是類型 T,可以接受。此時在M1()中的t只是t1的值拷貝,所以M1()的修改影響不到t1。

當調用 t1.M2() => M2(t1) ,這是將 T 類型傳給了 *T 類型,go可能會取 t1 的地址傳進去: M2(t1) 。所以 M2() 的修改可以影響 t1 。

類型的變量這兩個方法都是擁有的。

下面聲明一個 *T 類型的變量,并調用 M1()M2()

 t2 := T{"t2"}
 fmt.Println("M1調用前:", t2.Name)
 t2.M1()
 fmt.Println("M1調用后:", t2.Name)
 fmt.Println("M2調用前:", t2.Name)
 t2.M2()
 fmt.Println("M2調用后:", t2.Name)

輸出結果為:

M1調用前: t2

M1調用后: t2

M2調用前: t2

M2調用后: name2

t2.M1() => M1(t2) , t2 是指針類型, 取 t2 的值并拷貝一份傳給 M1。

t2.M2() => M2(t2) ,都是指針類型,不需要轉換。

*T 類型的變量也是擁有這兩個方法的。

傳給接口會怎樣?

先聲明一個接口

type Intf interface {
 M1()
 M2()
}

使用:

 var t1 T = T{"t1"}
 t1.M1()
 t1.M2()
 var t2 Intf = t1
 t2.M1()
 t2.M2()

報錯:

./main.go:9: cannot use t1 (type T) as type Intf in assignment:

T does not implement Intf (M2 method has pointer receiver)

var t2 Intf = t1 這一行報錯。

t1 是有 M2() 方法的,但是為什么傳給 t2 時傳不過去呢?

簡單來說,按照接口的理論:傳過去【賦值】的對象必須實現了接口要求的方法,而t1沒有實現M2() ,t1的指針實現了M2() 。另外和c語言一樣,函數名本身就是指針

當把 var t2 Intf = t1 修改為 var t2 Intf = t1 時編譯通過,此時 t2 獲得的是 t1 的地址, t2.M2() 的修改可以影響到 t1 了。

如果聲明一個方法 func f(t Intf) , 參數的傳遞和上面的直接賦值是一樣的情況。

嵌套類型

聲明一個類型 S,將 T 嵌入進去

type S struct { T }

使用下面的例子測試一下:

 t1 := T{"t1"} 
 s := S{t1} 
 fmt.Println("M1調用前:", s.Name) 
 s.M1() 
 fmt.Println("M1調用后:", s.Name) 
 fmt.Println("M2調用前:", s.Name) 
 s.M2() 
 fmt.Println("M2調用后:", s.Name) 
 fmt.Println(t1.Name)

輸出:

M1調用前: t1

M1調用后: t1

M2調用前: t1

M2調用后: name2

t1

將 T 嵌入 S, 那么 T 擁有的方法和屬性 S 也是擁有的,但是接收者卻不是 S 而是 T。

所以 s.M1() 相當于 M1(t1) 而不是 M1(s)

最后 t1 的值沒有改變,因為我們嵌入的是 T 類型,所以 S{t1} 的時候是將 t1 拷貝了一份。

假如我們將 s 賦值給 Intf 接口會怎么樣呢?

 var intf Intf = s 
 intf.M1() 
 intf.M2()

報錯:

cannot use s (type S) as type Intf in assignment: S does not implement Intf (M2 method has pointer receiver)

還是 M2() 的問題,因為 s 此時還是值類型。

var intf Intf = s 這樣的話編譯通過了,如果在 intf.M2() 中改變了 Name 的值, s.Name 被改變了,但是 t1.Name 依然沒變,因為現在 t1 和 s 已經沒有聯系了。

下面嵌入 *T 試試:

type S struct { *T }

使用時這樣:

 t1 := T{"t1"} 
 s := S{t1} 
 fmt.Println("M1調用前:", s.Name) 
 s.M1() 
 fmt.Println("M1調用后:", s.Name) 
 fmt.Println("M2調用前:", s.Name) 
 s.M2() 
 fmt.Println("M2調用后:", s.Name) 
 fmt.Println(t1.Name)

M1調用前: t1

M1調用后: t1

M2調用前: t1

M2調用后: name2

name2

惟一的區(qū)別是最后 t1 的值變了,因為我們復制的是指針。

接著賦值給接口試試:

 var intf Intf = s i
 ntf.M1() 
 intf.M2() 
 fmt.Println(s.Name)

編譯沒有報錯。這里我們傳遞給 intf 的是值類型而不是指針,為什么可以通過呢?

拷貝 s 的時候里面的 T 是指針類型,所以調用 M2() 的時候傳遞進去的是一個指針。

var intf Intf = s 的效果和上面一樣。

總結

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

您可能感興趣的文章:
  • Go語言應該什么情況使用指針
  • 關于Golang中range指針數據的坑詳解
  • Go 語言的指針的學習筆記
  • Go語言中結構體方法副本傳參與指針傳參的區(qū)別介紹
  • golang方法中receiver為指針與不為指針的區(qū)別詳析
  • Go語言中的指針運算實例分析
  • Go語言指針訪問結構體的方法
  • Go語言指針使用分析與講解

標簽:泰安 東營 昭通 晉中 駐馬店 滄州 瀘州 阿壩

巨人網絡通訊聲明:本文標題《golang中值類型/指針類型的變量區(qū)別總結》,本文關鍵詞  golang,中值,類型,指針,的,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang中值類型/指針類型的變量區(qū)別總結》相關的同類信息!
  • 本頁收集關于golang中值類型/指針類型的變量區(qū)別總結的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲一区中文在线| 亚洲自拍偷拍欧美| 欧美精品在线观看播放| 国产a区久久久| 日韩av中文字幕一区二区| 欧美国产成人精品| 91精品久久久久久久91蜜桃| 波多野结衣91| 国内精品国产三级国产a久久| 亚洲精品视频观看| 国产亚洲欧洲一区高清在线观看| 7777精品伊人久久久大香线蕉| www.色精品| 国产成人免费av在线| 日日摸夜夜添夜夜添精品视频 | 久久久久久免费毛片精品| 欧美日韩久久不卡| 91亚洲男人天堂| 成人性生交大片| 九九国产精品视频| 青青草成人在线观看| 亚洲综合小说图片| 亚洲视频一区二区免费在线观看| 久久综合资源网| 欧美一区永久视频免费观看| 欧美日韩亚洲综合一区二区三区| av一区二区三区黑人| 国产乱码精品一区二区三区av | 伦理电影国产精品| 五月天精品一区二区三区| 亚洲黄色性网站| 亚洲欧美另类小说视频| 国产精品国产精品国产专区不蜜| 久久久精品国产免费观看同学| 欧美成人高清电影在线| 日韩三级在线观看| 日韩美一区二区三区| 欧美一区二区三区精品| 1024国产精品| 中文字幕在线不卡视频| 日韩一区有码在线| 一区二区三区资源| 亚洲国产精品影院| 日韩精品91亚洲二区在线观看| 日日欢夜夜爽一区| 美腿丝袜亚洲一区| 国产一区二区免费看| 丁香五精品蜜臀久久久久99网站| 不卡的av在线| 在线看日本不卡| 欧美日韩激情一区二区三区| 91精品国产欧美一区二区| 欧美白人最猛性xxxxx69交| 久久这里只有精品6| 中国av一区二区三区| 一色桃子久久精品亚洲| 一区二区三区高清在线| 天天色综合天天| 国产在线精品一区二区夜色 | av在线不卡电影| 972aa.com艺术欧美| 精品视频1区2区| 欧美精品一区二区三| 国产精品卡一卡二卡三| 一区二区免费在线播放| 日韩专区在线视频| 国产成人日日夜夜| 91丨porny丨蝌蚪视频| 欧美高清www午色夜在线视频| 欧美大片在线观看一区| 国产精品久久久久一区| 亚洲电影在线播放| 国产九色精品成人porny| 国产69精品久久久久777| 日本久久一区二区| 日韩欧美一级精品久久| 国产精品传媒视频| 奇米影视一区二区三区| 成人高清av在线| 69av一区二区三区| 中文字幕免费不卡| 日韩精品乱码免费| 成人avav影音| 日韩欧美国产综合一区| 自拍偷拍亚洲综合| 精品中文av资源站在线观看| 日本韩国一区二区三区| 久久综合久久久久88| 亚洲黄色尤物视频| 国产丶欧美丶日本不卡视频| 欧美色图天堂网| 久久久久久久久久久电影| 亚洲高清不卡在线观看| 粉嫩av亚洲一区二区图片| 在线成人av网站| 亚洲婷婷综合久久一本伊一区| 蜜桃视频第一区免费观看| 一本色道久久综合亚洲91 | 欧美mv日韩mv国产网站| 一区二区三区久久久| 国产成人精品在线看| 欧美麻豆精品久久久久久| 国产精品视频九色porn| 免费成人在线观看| 91福利视频在线| 国产精品久久三区| 国产在线精品一区二区三区不卡| 欧美日韩免费观看一区二区三区 | 亚洲男帅同性gay1069| 国产精品一二三区在线| 制服丝袜中文字幕亚洲| 一区二区免费看| 91一区二区三区在线观看| 亚洲国产精品av| 国产精品中文字幕欧美| 日韩欧美成人激情| 免费的成人av| 日韩手机在线导航| 日韩精品成人一区二区三区| 欧美亚洲综合一区| 一区二区三国产精华液| 日本二三区不卡| 136国产福利精品导航| 成人av在线影院| 国产精品国模大尺度视频| 国产成人精品三级麻豆| 国产亚洲欧美一级| 国产激情精品久久久第一区二区| 久久综合国产精品| 久久av中文字幕片| 精品精品国产高清a毛片牛牛| 日本不卡一区二区三区高清视频| 欧美猛男男办公室激情| 午夜精品一区二区三区免费视频| 欧美日本韩国一区二区三区视频| 亚洲国产精品视频| 91精品国产综合久久久蜜臀图片| 亚洲一区在线播放| 欧美日韩一区成人| 日韩国产高清在线| 欧美一级片免费看| 激情图区综合网| 久久久一区二区三区| 懂色一区二区三区免费观看| 国产日本亚洲高清| 91在线视频网址| 亚洲图片有声小说| 欧美一级艳片视频免费观看| 精品亚洲aⅴ乱码一区二区三区| 日韩午夜激情视频| 粉嫩在线一区二区三区视频| 综合在线观看色| 4hu四虎永久在线影院成人| 裸体健美xxxx欧美裸体表演| 久久久精品国产免大香伊| 波多野结衣在线一区| 一区二区三区在线视频免费观看| 欧美亚洲国产一区二区三区va| 日韩一区欧美二区| 久久久久久久久伊人| 高清日韩电视剧大全免费| 国产精品电影一区二区| 欧美怡红院视频| 另类小说综合欧美亚洲| 亚洲国产激情av| 欧美日韩成人综合在线一区二区| 久久99久久久欧美国产| 国产精品久久久久久久久免费丝袜| 色噜噜夜夜夜综合网| 蜜桃一区二区三区在线观看| 中文字幕va一区二区三区| 欧美日韩精品电影| 成人美女视频在线看| 天堂精品中文字幕在线| 国产欧美精品区一区二区三区| 欧美在线免费视屏| 国产精品一区在线观看你懂的| 亚洲免费观看高清在线观看| 欧美成人乱码一区二区三区| av不卡免费在线观看| 蜜桃视频免费观看一区| 亚洲欧美激情一区二区| 久久综合色天天久久综合图片| 日本高清无吗v一区| 国产一区二区不卡| 婷婷开心激情综合| 国产精品三级视频| 日韩欧美国产综合一区| 欧洲精品在线观看| 国产91丝袜在线播放| 日韩二区在线观看| 久久国产尿小便嘘嘘尿| 中文字幕一区二区日韩精品绯色 | 亚洲人成精品久久久久久| 日韩精品一区在线| 欧美主播一区二区三区| 成人在线一区二区三区| 久久99国产乱子伦精品免费| 亚洲香蕉伊在人在线观| 中文字幕制服丝袜一区二区三区|