[英]Go array slice from function return statement
我有以下功能:
func (c *Class)A()[4]byte
func B(x []byte)
我想打電話
B(c.A()[:])
但我得到這個錯誤:
cannot take the address of c.(*Class).A()
如何正確獲取Go中函數返回的數組?
cA()
的值(方法的返回值)不可尋址。
對於類型為T的操作數x,地址操作&x生成類型為* T到x的指針。 操作數必須是可尋址的,即,變量,指針間接或切片索引操作; 或可尋址結構操作數的字段選擇器; 或者可尋址數組的數組索引操作。 作為可尋址性要求的例外,x也可以是復合文字。
如果切片操作數是字符串或切片,則切片操作的結果是相同類型的字符串或切片。 如果切片操作數是數組,則它必須是可尋址的,並且切片操作的結果是具有與數組相同的元素類型的切片。
使cA()
(一個數組cA()
的值可以為切片操作[:]
尋址。 例如,將值賦給變量; 變量是可尋址的。
例如,
package main
import "fmt"
type Class struct{}
func (c *Class) A() [4]byte { return [4]byte{0, 1, 2, 3} }
func B(x []byte) { fmt.Println("x", x) }
func main() {
var c Class
// B(c.A()[:]) // cannot take the address of c.A()
xa := c.A()
B(xa[:])
}
輸出:
x [0 1 2 3]
你有沒有嘗試先將數組放在局部變量中?
ary := c.A()
B(ary[:])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.