首页  >  文章  >  后端开发  >  在知道 Go 中的字符串是不可变的情况下,如何修改它们?

在知道 Go 中的字符串是不可变的情况下,如何修改它们?

DDD
DDD原创
2024-10-26 04:33:02461浏览

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) 创建字符串中的字节切片,string(new_str) 将修改后的字节切片转换回字符串。

通过此更改,您现在可以更改字符串并将小写字符隐藏为大写:

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

以上是在知道 Go 中的字符串是不可变的情况下,如何修改它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn