6.Go语言基本类型 —— 字符串类型
2019-06-13 23:19
507 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/FHD994603831/article/details/91906687
字符串类型
字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。字符串是 UTF-8 字符的一个序列,当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节。 在go中,字符串是一种内置的类型。
字符串包括解释型和原生型(raw):
解释字符串
该类字符串使用双引号括起来,其中的相关的转义字符将被替换,这些转义字符包括:
\n:换行符 \r:回车符 \t:tab 键 \u 或 \U:Unicode 字符 \\:反斜杠自身
非解释字符串raw
该类字符串使用括起来,支持换行,例如:The quick brown fox jumps over a lazy dog.\r\n中的\r\n` 会被原样输出。
可以使用数组下标的形式获取字符,但是注意,不能用这种方式对字符进行修改。源程序
package main func main() { var str string //声明一个string类型的变量 str = `The quick brown fox jumps over a lazy dog.` //赋值 r := str[0] //获取第一个元素的值 length := len(str) //字符串的长度 str[0] = 's' //编译报错:cannot assign to str[0] }
注意事项和使用细节*
- Go语言的字符串的字节使用UTF-8编码标识Unicode文本,这样Golang统一使用UTF-8编码,中文乱码问题不会再困扰程序员。
- 字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的。
- 字符串的两种表示形式
双引号, 会识别转义字符
反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防攻击、输出源代码等效果 【案例演示】
- 字符串拼接方式
- 当一行字符串太长时,需要使用到多行字符串,可以如一下操作
- 字符串的长度用len计算字符串拼接用 +。
两个字符串 str1 和 str2 可以通过 str := str1 + str2 拼接在一起。
- str2 追加在 str1 尾部并生成一个新的字符串。也可以使用+=来拼接 str1 += str2
- 在循环中使用加号 + 拼接字符串并不是最高效的做法,更好的办法是使用函数 strings.Join()。最好的方法是使用bytes.Buffer来拼接。我从网上找到了一个小例子,对这几种方式的速度进行了比较:源程序
package main import ( "bytes" "fmt" "strings" "time" ) func benchmarkStringFunction(n int, index int) (d time.Duration) { v := "ni shuo wo shi bu shi tai wu liao le a?" var s string var buf bytes.Buffer t0 := time.Now() for i := 0; i < n; i++ { switch index { case 0: // fmt.Sprintf s = fmt.Sprintf("%s[%s]", s, v) case 1: // string + s = s + "[" + v + "]" case 2: // strings.Join s = strings.Join([]string{s, "[", v, "]"}, "") case 3: // temporary bytes.Buffer b := bytes.Buffer{} b.WriteString("[") b.WriteString(v) b.WriteString("]") s += b.String() case 4: // stable bytes.Buffer buf.WriteString("[") buf.WriteString(v) buf.WriteString("]") } if i == n-1 { if index == 4 { // for stable bytes.Buffer s = buf.String() } fmt.Println("String length:", len(s)) // consume s to avoid compiler optimization } } t1 := time.Now() d = t1.Sub(t0) fmt.Printf("time of way(%d)=%v\n", index, d) return d } func main() { k := 5 d := [5]time.Duration{} for i := 0; i < k; i++ { d[i] = benchmarkStringFunction(10000, i) } for i := 0; i < k-1; i++ { fmt.Printf("way %d is %6.1f times of way %d\n", i, float32(d[i])/float32(d[k-1]), k-1) } }
相关文章推荐
- go语言基础之基本数据类型
- GO语言基本数据类型总结
- Go语言基本的语法和内置数据类型初探
- 【Go语言】基本类型排序和 slice 排序
- [go语言]基本数据类型
- go语言如何将时间转化为字符串String类型
- Go语言中其他数据与字符串类型的转换
- Go 语言的基本数据类型
- GO语言基本类型分析
- Golang学习笔记(2)---go语言基本类型
- Go 语言的基本数据类型
- 第3篇:swift语言笔记:基本语法/运算符/数据类型/字符串等关键点
- Go语言学习二:Go基础(变量、常量、数值类型、字符串、错误类型)
- go语言 类型:字符串
- go语言学习-golang的基本数据类型
- 5.笔记go语言——基本类型
- go语言基本数据类型
- Go语言-基本类型(int,float,bool,byte,string)
- Go语言中其他数据与字符串类型的转换
- 【Go学习笔记】go语言中的基本数据类型和包的介绍(一)