Go的学习路程:字符串|Go 主题月

102 阅读1分钟

应该所有的编程语言都有字符串数据类型,至少我接触过的所有编程语言都是如此。

Go 中的字符串是一个不可变字节序列,其本身是一个复合结构。

type stringStruct struct {
    str unsafe.Pointer
    len int
}

如上代码就是字符串类型的定义,结构很简单:

  • str 字符串的首地址;
  • len 字符串的长度;

使用 var str string 就可以定义一个字符串类型的变量,也可以使用 str := "hello world" 直接声明并赋值变量的方式。

[]byte 转 string

byte 切片可以很方便的转换成 string。string(bytes) 即可将 []byte 的 bytes 转变成字符串类型。

package main
import "fmt"

func main() {
    bytes := []byte{104, 101, 108, 108, 111}
    str := string(bytes)
    fmt.Println(str)
}

gorunstring1.png

string 转 []byte

string也可以方便的转成byte切片. []byte(str) 即可将字符串 str 转变成 []byte。

package main
import "fmt"

func main() {
    str := "hello"
    bytes := []byte(str)
    fmt.Println(bytes)
}

gorunstring2.png

字符串拼接

可以使用“+”操作符将两个字符串拼接到一起形成一个新的字符串。这个新字符串属于一个全新的字符串,并不是在原来字符串的基础上扩展而来。

package main
import "fmt"

func main() {
    str1 := "hello"
    str2 := " "
    str3 := "world"
    fmt.Println(str1 + str2 + str3)
}

gorunstring3.png

字符串访问

字符串是不可变的,如果想改变字符串内容。只能重新实例化一个新的字符串。我们可以通过下标来获取字符串中的每个字符。因为字符串本身就是一个 []byte 所以通过下标可以获取指定位置的 byte。

package main
import "fmt"

func main() {
    str := "hello world"
    for i:=0; i<len(str); i++ {
            fmt.Printf("%c", str[i])
    }
}

gorunstring4.png