Go 言語の文字列は不変です。つまり、作成後に内容を変更することはできず、変更操作ごとにコピーが作成されます。これは、結合操作 (または strings.Join を使用する必要があります)、ローカル変数 (文字列を操作するときはスコープに注意する必要があります)、および最適化 (コンパイラはパフォーマンスを向上させるために最適化を実行できます) に影響します。文字列を連結するときは、bytes.Buffer を使用してコピーの作成を回避します。
文字列はプログラミングにおいて不可欠なデータ型であり、Golang における文字列のパフォーマンスには非常に興味深い特性があります。 : それは不変です。これは、他の多くの言語で見られる可変文字列とは異なり、コーディング パターンに大きな影響を与える可能性があります。
Golang では、文字列は不変です。つまり、文字列が作成されると、その内容は変更できません。代わりに、文字列を変更すると、文字列の新しいコピーが作成されます。
例:
s := "Hello" s[0] = 'H' // 会引发错误:cannot assign to s[0]
このコードは、文字列 s
の最初の文字を変更しようとしますが、s# # のため、コンパイル時エラーがスローされます。 # は不変です。
演算子または
strings.Join 関数を使用する必要があります。これにより、文字列のコピーが作成されます。
// 不可取的做法:重复创建字符串副本 var s = "" for i := 0; i < 100; i++ { s += strconv.Itoa(i) // 会创建 100 个字符串副本 } // 更好的做法:使用 bytes.Buffer var b bytes.Buffer for i := 0; i < 100; i++ { b.WriteString(strconv.Itoa(i)) // 不会创建任何字符串副本 }最初のコード スニペットでは、次のコードを繰り返し作成します。文字列を連結するために文字列のコピーを使用しますが、これによりパフォーマンスに大きなオーバーヘッドが発生します。 2 番目のコード スニペットでは、コピーの作成を避けるために
bytes.Buffer を使用します。
以上がGolang 文字列可変性分析の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。