2017-05-21 7 views
1

はのは、私は、以下の機能を持っているとしましょう:既存のリファレンスからスライスを作成することはできますか?

func foo(bar []int) { 
    bar[0] = 456 
} 

私は、このようなIときに、aを参照する一つの要素で[]intを作成したい:

var a int = 10 
// mySlice := ... crazy hackery? 
foo(mySlice) 

aの値は456になります。


私はこれが狂っていて愚かであり、まったく正しいことではないことを知っています。私は "正しい"方法を探していません。 fooの関数プロトタイプは同じままでなければなりません。

基礎となるintが変更されても、そのスライスを指すスライスは不変であることが保証できます。

これはc2go projectのための奇妙な要件の理由です。

答えて

0

unsafe.Pointerで任意のタイプをキャストできます。

最初にそれをスライス、配列へのポインタへ*intを変換:

(*[1]int)(unsafe.Pointer(&a))[:] 

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

+0

パーフェクト!ありがとう –

+0

名前が示すように、これは本当に**最も安全ではありません**。私はこれを行うためのエレガントな方法を見つけたり、考えたりすることはできません。また、(質問のような)非常にニッチな状況を除いて誰もこのことをしてはいけません。それでも、それは唯一の解決策であるようです。 – Addison

関連する問題