应该所有的编程语言都有字符串数据类型,至少我接触过的所有编程语言都是如此。
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)
}
string 转 []byte
string也可以方便的转成byte切片. []byte(str) 即可将字符串 str 转变成 []byte。
package main
import "fmt"
func main() {
str := "hello"
bytes := []byte(str)
fmt.Println(bytes)
}
字符串拼接
可以使用“+”操作符将两个字符串拼接到一起形成一个新的字符串。这个新字符串属于一个全新的字符串,并不是在原来字符串的基础上扩展而来。
package main
import "fmt"
func main() {
str1 := "hello"
str2 := " "
str3 := "world"
fmt.Println(str1 + str2 + str3)
}
字符串访问
字符串是不可变的,如果想改变字符串内容。只能重新实例化一个新的字符串。我们可以通过下标来获取字符串中的每个字符。因为字符串本身就是一个 []byte 所以通过下标可以获取指定位置的 byte。
package main
import "fmt"
func main() {
str := "hello world"
for i:=0; i<len(str); i++ {
fmt.Printf("%c", str[i])
}
}