我具有以下功能:func (c *Class)A()[4]bytefunc B(x []byte)我想打電話B(c.A()[:])但是我得到這個錯誤:cannot take the address of c.(*Class).A()如何正確獲取Go中函數(shù)返回的數(shù)組切片?
2 回答

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
的價值c.A(),從方法的返回值,不能尋址。
地址運算符
對于類型T的操作數(shù)x,地址操作&x生成指向*的* T類型的指針。操作數(shù)必須是可尋址的,即變量,指針間接尋址或切片索引操作;或可尋址結構操作數(shù)的字段選擇器;或可尋址數(shù)組的數(shù)組索引操作。除可尋址性要求外,x還可為復合文字。
切片
如果切片的操作數(shù)是字符串或切片,則切片操作的結果是相同類型的字符串或切片。如果切片的操作數(shù)是數(shù)組,則它必須是可尋址的,并且切片操作的結果是與數(shù)組具有相同元素類型的切片。
使的值c.A()成為數(shù)組,可用于切片操作[:]。例如,將值分配給變量;變量是可尋址的。
例如,
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]
- 2 回答
- 0 關注
- 259 瀏覽
添加回答
舉報
0/150
提交
取消