當前位置:成語大全網 - 書法字典 - golang方法返回的結構為什麽得不到地址?

golang方法返回的結構為什麽得不到地址?

golang方法的返回值提取結構取不到地址的原因是:①返回值沒有保存在變量中,返回值本身只是臨時保存在程序運行的堆棧上的壹個不確定的位置,所以取不到地址;(2)用來把地址作為實參數的運算符是&;,形參聲明變量類型是指針,需要地址值。(3)將形參聲明為指針的形參的實參只能是地址值。

所以先列出修改後的代碼,修改的要點是把“*NewPerson1()。speak()" to " var b = new person 1();(& ampb)。Speak()”,同時更改“NewPerson2()。speak()" to " var a = new person 2();(& ampa)。Speak()",代碼如下:

包主;

導入“fmt”;

類型角色結構{

名稱字符串

}

func (p *PersonA) Speak () {

fmt。Println ( "person speak ",p.name)

}

func (p PersonA) Walk ( ){

fmt。Println("人走",p.name)}

func new person 1()(p PersonA){

返回角色{ "新成員1"}}

func NewPerson2()(p PersonA){

返回角色{ "新人物2"}}

func main () {

var a = new person 2();(& ampa)。speak();?

答。walk();

fmt。Println (" -")?;

var b = new person 1();(& ampb)。speak();

b.Walk ()}

Go代碼調試效果

關於指針變量的使用,go語言和其他有指針的編程語言是壹樣的,比如C語言。只有返回值是地址/指針,不存在賦值前對返回值進行尋址這樣的操作。類似的錯誤後面會整理出來。

不同的是go語言更簡單,go語言函數可以使用結構或者結構的指針來傳遞結構參數。而且與C語言不同,go語言沒有區分結構指針和結構訪問成員的運算符,go語言只有“.”對於這兩種情況,但是沒有"-> " C語言專門為結構指針準備的。接線員。

可以使用結構指針作為結構的方法的參數來引用自身嗎?