簡體   English   中英

從函數返回語句轉到數組切片

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM