日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于go指针在方法or函数中这件事

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于go指针在方法or函数中这件事 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

title

  • 1. go中的指針
  • 2. 函數中的指針
  • 3. 方法中的指針

1. go中的指針

使用 *類型 聲明指針…
使用*變量名獲取指針的值…
使用 &p 獲取指針的內存地址…

fmt.Println("======== 指針復習 ========")// 聲明指針avar a *intb := 1// 獲取到b的內存地址.. 指向ba = &bfmt.Println(a, &b, " 獲取到指針變量的值 ", *a)

2. 函數中的指針

go 函數中的指針默認是值傳遞,即傳遞類型參數,是對當前類型的拷貝。而不是傳遞引用。如果傳遞參數指針,則改變原來參數的值。

package mainimport "fmt"type Vertex struct {X, Y float64 }func show1(v Vertex) {v.X = 9v.Y = 9 }func show(v *Vertex) {v.X = 9v.Y = 9 }func main() {v := Vertex{1, 2}show1(v)fmt.Println(v)show(&v)fmt.Println(v) }

可以看到結果… 傳遞指針的改變了原來的值…

$ go run . {1 2} {9 9}

而對于go中函數,參數是什么類型,傳遞就是什么類型

func show(v *Vertex) {v.X = 9v.Y = 9 }// 錯誤 v := Vertex{1, 2} show(v)// 正確 v := &Vertex{1, 2} show(v)

3. 方法中的指針

go中的方法,有個方法接收者。這也是和函數的區別。某個結構體或者類型,可以給它們設置方法。

// 結構體的方法, (v *Vertex)為方法接收者 func (v *Vertex) changeOrg() {v.X, v.Y = 3.0, 3.0fmt.Println("in changeOrg ", *v) }// (v Vertex)為方法接收者 func (v Vertex) nothingChange() {v.X, v.Y = 3.0, 3.0fmt.Println("copy one ", v) }

方法的指針可以重定向.這里說會比較晦澀。即接收者是指針,可以用值類型調用。接收者是值類型,也可以用指針調用。

v := Vertex{99, 99}// 接收者是指針, 方法能用值類型調用// 由于 changeOrg 方法有一個指針接收者,為方便起見,Go 會將語句 v.changeOrg() 解釋為 (&v).changeOrg()。v.changeOrg()// (&v).changeOrg()

或者

v := Vertex{1, 1}// 值調用v.nothingChange()fmt.Println(v)p := &v// 方法支持指針調用p.nothingChange()// (*p).m1()fmt.Println(v)

總結

以上是生活随笔為你收集整理的关于go指针在方法or函数中这件事的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。