go语言将字符串作为一种原生的基本数据类型,字符串的初始化可以使用字符串的字面量
var a = "hello,world"
1) 字符串是常量,可以通过类似数组的索引访问其字节单元,但是不能修改某个字节的值
var a = "hello,world"
b := a[0]
a[1]='a'
package main
import "fmt"
func main() {
var a = "hello , world"
b := []byte(a)//此时打印b,以rane方式输出所有码元
// b := a[0] // 数组a的第0个索引
// fmt.Printf("%c", b) //以UTF-8形式展示所有
// a[1] = 'a'
fmt.Println(b)
}
按数组切割,数组不能修改值,所以
a[1] ='a' 是错误的
2)字符串转换为切片[]byte(s)要慎用,尤其是当数据量较大时,每转换一次都需要复制内容
3)字符串尾部不包含null字符
4)字符串类型底层实现是一个二元的数据结构,一个是指向字节数组的起点,另一个是长度
5)基于字符串创建的切片和原字符串指向相同的底层字符数组,一样不能修改,对字符串的切片操作返回的子串仍然是string,而非slice
package main
import "fmt"
func main() {
a := "hello ,world"
b := a[0:4]
c := a[1:]
d := a[:4]
fmt.Printf("b=%v,c=%v,d=%v \n", b, c, d)
fmt.Printf("%#v,%#v,%#v", b, c, d)
}
6)字符串和切片的转换:字符串可以转换为字节数组,也可以转换为unicode的字节数组
e := []byte(a)
f := []rune(a)
7)字符串的运算
a := "hello"
b := "world"
c := a+b //字符串的拼接
len(a) //内置函数获取字符串的长度
d := "hello,世界!"
for i := 0;i < len(d);i++ {
fmt.println(d[i])
} //遍历字节数组
package main
import "fmt"
func main() {
a := "hello"
b := "world"
c := a + b
fmt.Println(len(c))
d := "hello,世界!"
e := []rune(d) //转rune类型遍历
for i := 0; i < len(d); i++ {
fmt.Println(d[i])
}
for _, v := range e {
fmt.Printf("%c", v)
}
}