type Foo [3]intarr := [3]int {1, 2, 3}foo := &Foo{arr}它在golang中不起作用,它說:不能使用“arr”(類型 [3]int)作為類型 int我應該如何正確和優雅地做到這一點;-),我希望我的代碼可以寫成如下:func_name(&Foo{arr}) // func_name is to receive a *Foo and do something如果我這樣寫我的代碼:type Foo struct {array [3]int} arr := [3]int {1, 2, 3} func_name(&Foo(arr))它工作正常,但我希望我的代碼可以盡可能簡單。
2 回答

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
您的意思是:
arr := [3]int{1, 2, 3} foo := Foo(arr)
這里有一個游樂場鏈接可以嘗試一下。這不是一個別名;分配時將復制數組。如果要查找別名,請考慮改用切片。
原始代碼會創建一個新的元素,并嘗試使用 初始化其第一個元素,但由于編譯器指定的原因而失敗。Foo
arr

米琪卡哇伊
TA貢獻1998條經驗 獲得超6個贊
假設“別名”是指“兩種不同類型的人引用同一個底層緩沖區”:獲取指向數組的指針,然后將其轉換為另一種類型的指針。
package main
import "fmt"
type Foo [1]int
func main() {
bar := [1]int{}
foo := (*Foo)(&bar)
bar[0] = 0xdeadbeef
fmt.Println(*foo)
}
這在圍棋中既不優雅也不習慣用語——這就是切片的用途。
- 2 回答
- 0 關注
- 139 瀏覽
添加回答
舉報
0/150
提交
取消