关于go指针在方法or函数中这件事
生活随笔
收集整理的這篇文章主要介紹了
关于go指针在方法or函数中这件事
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
title
- 1. go中的指針
- 2. 函數(shù)中的指針
- 3. 方法中的指針
1. go中的指針
使用 *類型 聲明指針…
使用*變量名獲取指針的值…
使用 &p 獲取指針的內(nèi)存地址…
2. 函數(shù)中的指針
go 函數(shù)中的指針默認(rèn)是值傳遞,即傳遞類型參數(shù),是對當(dāng)前類型的拷貝。而不是傳遞引用。如果傳遞參數(shù)指針,則改變原來參數(shù)的值。
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) }可以看到結(jié)果… 傳遞指針的改變了原來的值…
$ go run . {1 2} {9 9}而對于go中函數(shù),參數(shù)是什么類型,傳遞就是什么類型
func show(v *Vertex) {v.X = 9v.Y = 9 }// 錯誤 v := Vertex{1, 2} show(v)// 正確 v := &Vertex{1, 2} show(v)3. 方法中的指針
go中的方法,有個方法接收者。這也是和函數(shù)的區(qū)別。某個結(jié)構(gòu)體或者類型,可以給它們設(shè)置方法。
// 結(jié)構(gòu)體的方法, (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) }方法的指針可以重定向.這里說會比較晦澀。即接收者是指針,可以用值類型調(diào)用。接收者是值類型,也可以用指針調(diào)用。
v := Vertex{99, 99}// 接收者是指針, 方法能用值類型調(diào)用// 由于 changeOrg 方法有一個指針接收者,為方便起見,Go 會將語句 v.changeOrg() 解釋為 (&v).changeOrg()。v.changeOrg()// (&v).changeOrg()或者
v := Vertex{1, 1}// 值調(diào)用v.nothingChange()fmt.Println(v)p := &v// 方法支持指針調(diào)用p.nothingChange()// (*p).m1()fmt.Println(v)總結(jié)
以上是生活随笔為你收集整理的关于go指针在方法or函数中这件事的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python安装教程:
- 下一篇: java10支持mybatis_写了10