寝ても覚めてもこんぴうた

プログラム書いたり、ネットワーク設計したり、サーバ構築したり、車いじったり、ゲームしたり。そんなひとにわたしはなりたい。 投げ銭は kyash_id : chidakiyo マデ

constで定義した値(string)をポインタとして扱おうと思ったら怒られた

タイトルの通りですが、

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