Golang字符串
字符串在任何开发语言中都非常重要,处理好字符串在日常开发中占有非常大的比重,也是是否熟练掌握一门语言的标志
一、字符串基础
1、Go字符串底层就是Byte数组
2、在golang中,字符,字符串中打印单个字符的本质就是一个整数,是该字符对应的utf-8编码的码值
平时开发过程中遍历字符串情况时常有,不过要注意中文:
package main import "fmt" func main() { var s string = "123hello你好" var b []byte = []byte(s) var r []rune = []rune(s) // 使用[]byte, 如果字符串中有中文将会出现乱码 for i := 0; i < len(b); i++ { fmt.Printf("%c", s[i]) } fmt.Println() // 用range循环字符串类型则不会有乱码 for _, v := range s { fmt.Printf("%c", v) } fmt.Println() // 转为rune来存储用for循环也不会有乱码 for i := 0; i < len(r); i++ { fmt.Printf("%c", r[i]) } fmt.Println() // 来看看底层, byte数组里最大只能存储256,如果是汉字,编码超过了256,于是就分开存储了 fmt.Println(b) // [49 50 51 104 101 108 108 111 228 189 160 229 165 189] // rune是int32 可以存储的下,所以不会有问题 fmt.Println(r) // [49 50 51 104 101 108 108 111 20320 22909] }
输出结果:
123helloä½ å¥½
123hello你好
123hello你好
[49 50 51 104 101 108 108 111 228 189 160 229 165 189]
[49 50 51 104 101 108 108 111 20320 22909]
二、字符串拼接
字符串拼接在开发过程中高频率出现,golang中有好几种拼接字符串方法,不同场景使用不同的方法:
package main import ( "bytes" "fmt" "strings" ) func main() { x := "hello" // 使用+号 fmt.Println(x + " world") // 如果字符串后要拼接其他类型,使用Sprintf x = fmt.Sprintf("%s%d", x, 100) fmt.Println(x) // 如果要高性能使用bytes.Buffer var stringBuffer bytes.Buffer stringBuffer.WriteString(x) stringBuffer.WriteString("hello world") fmt.Println(stringBuffer.String()) // 如果是数组转字符串用join arrStr := []string{"a", "b", "c"} s := strings.Join(arrStr, "-") fmt.Println(s) }
输出:
hello world
hello100
hello100hello world
a-b-c