ホームページ >バックエンド開発 >Golang >文字列が不変であることを知っていて、Go で文字列を変更するにはどうすればよいですか?

文字列が不変であることを知っていて、Go で文字列を変更するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-26 04:33:02553ブラウズ

How Do I Modify Strings in Go, Knowing They Are Immutable?

Go での文字列の変更: 実用的な解決策

Go では、文字列は不変です。つまり、文字列の内容は作成後に変更できません。既存の文字列を変更しようとする場合、これはイライラするかもしれませんが、fmt パッケージを使用する簡単な解決策があります。

次のコードを考えてみましょう:

<code class="go">package main

import "fmt"

func ToUpper(str string) string {
    new_str := str
    for i := 0; i < len(str); i++ {
        if str[i] >= 'a' && str[i] <= 'z' {
            chr := uint8(rune(str[i]) - 'a' + 'A')
            new_str[i] = chr
        }
    }
    return new_str
}

func main() {
    fmt.Println(ToUpper("cdsrgGDH7865fxgh"))
}</code>

このコードは、小文字を大文字にしようとします。文字列内に記述しますが、「new_str[i] に割り当てられません」というエラーが発生します。これは、文字列が不変であるためです。

これを克服するには、文字列をバイトのスライスに変換し、代わりにそれを変更できます。

<code class="go">func ToUpper(str string) string {
    new_str := []byte(str)
    for i := 0; i < len(str); i++ {
        if str[i] >= 'a' && str[i] <= 'z' {
            chr := uint8(rune(str[i]) - 'a' + 'A')
            new_str[i] = chr
        }
    }
    return string(new_str)
}</code>

ここで、 []byte(str) は

この変更により、文字列を変更して小文字を大文字に変換できるようになりました。

fmt.Println(ToUpper("cdsrgGDH7865fxgh")) // Output: CDSRGgdh7865FXGH

以上が文字列が不変であることを知っていて、Go で文字列を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。