zoukankan      html  css  js  c++  java
  • Go语言修改字符串

    Go 语言的字符串无法直接修改每一个字符元素,只能通过重新构造新的字符串并赋值给原来的字符串变量实现。请参考下面的代码:

    angel := "Heros never die"
    
    angleBytes := []byte(angel)
    
    for i := 5; i <= 10; i++ {
        angleBytes[i] = ' '
    }
    
    fmt.Println(string(angleBytes))

    程序输出如下:
    Heros       die

    代码说明如下:

    • 在第 3 行中,将字符串转为字符串数组。
    • 第 5~7 行利用循环,将 never 单词替换为空格。
    • 最后打印结果。


    感觉我们通过代码达成了修改字符串的过程,但真实的情况是:Go 语言中的字符串和其他高级语言(Java、C#)一样,默认是不可变的(immutable)。

    字符串不可变有很多好处

    如天生线程安全,大家使用的都是只读对象,无须加锁;

    再者,方便内存共享,而不必使用写时复制(Copy On Write)等技术;

    字符串 hash 值也只需要制作一份。

    所以说,代码中实际修改的是 []byte,[]byte 在 Go 语言中是可变的,本身就是一个切片。

    在完成了对 []byte 操作后,在第 9 行,使用 string() 将 []byte 转为字符串时,重新创造了一个新的字符串。

    总结

      • Go 语言的字符串是不可变的。
      • 修改字符串时,可以将字符串转换为 []byte 进行修改。
      • []byte 和 string 可以通过强制类型转换互转。
  • 相关阅读:
    OLAP ODS项目的总结 平台选型,架构确定
    ORACLE ORA12520
    ORACLE管道函数
    ORACLE RAC JDBC 配置
    ORACLE RAC OCFS连接产生的错误
    ORACLE 启动和关闭详解
    OLAP ODS项目的总结 起步阶段
    ORACLE RAC 配置更改IP
    ORACLE RAC OCR cann't Access
    ORACLE RAC Debug 之路 CRS0184错误与CRS初始化
  • 原文地址:https://www.cnblogs.com/niuben/p/12523396.html
Copyright © 2011-2022 走看看