big.Int之间的差异* big.Int,你怎么按值传递一个big.Int

问题描述 投票:0回答:2

我可以用一个big.Int像文本()方法,它工作正常,但如果我返回big.Int然后使用“MYFUNC()。文本()”抛出一个错误,而如果我返回* big.Int ,我没有得到任何错误。我为什么可以用在big.Int,* big.Int文本(),并返回* big.Int但不能在其返回值为big.Int功能的功能?

https://play.golang.org/p/ovgeQDHFstP

在此基础上和其他行为(如如何打印),它看起来像* big.Int是打算使用的类型,是正确的?

另外,如果我制造和使用类型big.Int或* big.Int的一个变量,它是按引用传递。没关系。但是,如果我想通过一个由值,如何最能做些什么?

我应该做一个新的big.Int并将其设置为使用集(原始值),并通过了吗?或者我应该传递原始big.Int中,并将其值复制到使用set()函数中新big.Int?或者有没有做一些其他更好的办法?

pointers go biginteger
2个回答
0
投票

Text()方法是接收器类型*big.Int定义,所以很明显可以称之为该类型的变量和对返回*big.Int函数的返回值。你也可以把它的类型big.Int的变量,因为Go会自动发生,当你试图调用它的指针方法变量的地址,只是为了节省您的打字额外的符号的麻烦。

然而,你不能把它在返回big.Int函数的返回值,因为该值是不可寻址。下面是规范说,大约寻址:

对于类型T,写入动作&X的操作数X生成类型* T的至x的指针。的操作数必须是可寻址的,即,是一个变量,指针间接,或切片索引操作;或可寻址的操作数结构的场选择器;或可寻址阵列的阵列索引操作。作为例外的寻址要求,X还可以是一个(可能括号)复合字面。

你的返回值是没有这些东西,所以你不能使用指针方法比你可以写foo := &myFunc()了。要解决这个问题,可以节省一个变量的返回值,使之可寻址。但最有可能你的函数应该摆在首位返回一个指针。

还要注意,在围棋没有引用。一切都按值传递和指针的值,就像任何其他。


-1
投票

https://golang.org/pkg/math/big/Text()方法有一个指针接收器,这意味着你只能调用a.Text()如果是*big.Int

*big.Int是一个指向big.Int,看到https://play.golang.org/p/dD70b0tPeGp为您的代码的固定版本

© www.soinside.com 2019 - 2024. All rights reserved.