Language
string: []byteへの変換結果を変更しても元の文字列は変わらない
stringを[]byteへ変換すると、変更可能な別のバイト列として扱えます。
Sourcebyte_copy.go
Go 1.22
package stringexample
func ChangeFirstByte(original string) (unchanged string, changed string) {
bytes := []byte(original)
bytes[0] = 'G'
return original, string(bytes)
}Testbyte_copy_test.go
Go 1.22
package stringexample
import "testing"
func TestStringをByteSliceへ変換して変更しても元の文字列は変わらない(t *testing.T) {
unchanged, changed := ChangeFirstByte("go")
if unchanged != "go" || changed != "Go" {
t.Fatalf("original = %q, changed = %q", unchanged, changed)
}
}01Assertion
このテストで確認できること
- "go"を[]byteへ変換して先頭を変更する
- 元のstringはgoのまま、変換結果だけGoになる
stringは不変の値です。バイト単位の編集では[]byteを使い、編集後に必要な境界でstringへ戻します。無駄な変換が性能上の問題になる経路ではプロファイルで確認します。
OBSERVED RESULT
original string: go
changed []byte: Go