blog

unsafe]goで文字列のバイト配列を変更するには?

下にあるポインタを操作できるようにするポインタ 多くの高級言語と同様に、go言語の下にある文字列はバイト配列を指しており、これを変更することはできません。しかし、unsafeパッケージを通して文字列の...

Mar 1, 2020 · 1 min. read
Share this

ほとんどの高級言語と同様に、文字列の一番下の囲碁言語はバイト配列を指しており、変更することはできませんが、安全でないパッケージを介して文字列ポインタの一番下を操作するには、文字列の内容を変更する目的を達成することができます。C言語での操作へのポインタのこの変更は、しばしば見られます。

  • unsafeパッケージによる文字列のバイト配列へのポインタの取得
  • ポインタの変更
var originStr = "hello world"
var originBytesPtr = (*[]byte)(unsafe.Pointer(&originStr))
fmt.Printf("before: %s, %d", originStr, len(originStr))
*originBytesPtr = []byte("hzw")
fmt.Printf("after: %s, %d", originStr, len(originStr))

出力結果は

before: hello world, 11
after: hzw, 3

C言語とは異なり、goはポインタ型間で直接転送することができないため、unsafe.Pointerを使用することで、ポインタを操作することが可能になります。

Read next

JavaScriptのアルゴリズム - 再帰

なぜ再帰をアルゴリズムの最初の章にしたかというと、その後のソートなどのアルゴリズムでは、再帰の応用はどこにでもあると言えるので、最前線に置いて語っているからです。 基本的なことを少し知っていれば、関数やメソッドが自分自身を呼び出すことを再帰と呼ぶことを知っているはずです。 問題や部分問題は、異なるデータに加え、同じものを解くという考え方です。 短所:空間的複雑性が高い、スタックオーバーフロー...

Mar 1, 2020 · 1 min read