タイトルの通りですが、
goでconstで定義したstringの値をポインタとして渡したい箇所があり、
constで定義した値をそのまま渡そうと思ったら cannot take the address~~
みたいな形で怒られたのでメモ
ざっくりとしたコード
具体的にはgoでS3のsdkを使っていてstringをポインタで渡さなくてはならない箇所があったのですが、
コードの概要として以下のようなイメージ
const a = "hoge" process(&a) // cannot take the address
Stackoverflowでは
定数はアドレス指定可能なものとしてリストされておらず、アドレス指定可能なものとして指定されていないもの(上で引用したもの)は、アドレス演算子&のオペランドにすることはできません。
のように書かれていたのでやはりダメみたい。
一旦変数に受けてポインタにする
const a = "hoge" p := a process(&p)
か
変換する関数を経由すれば良いと思う
// const to pointer func CtoP(con string) *string { return &con } const a = "hoge" process(CtoP(a))
なるほどね。
参考URL : pointers - Find address of constant in go - Stack Overflow