go string类型的特性
参考文章:?http://c.biancheng.net/view/36.html 1. 获取ascii类型字符的长度个数和获取utf8类型字符长度的个数 a. len("咪咪")? //return 6 这获取的是ASCII长度 b.utf8.RuneCountInString("咪咪") // return 2获取的是utf8汉字长度个数 2. 字符串遍历,以ASCII方式遍历和以Unicode方式遍历 // 测试字符串长度 str := "我是 abcd" // ASCII码类型遍历 for i := 0; i < len(str); i++ { fmt.Printf("ASCII %c,%dn",str[i],str[i]) } // unicode码类型遍历 for _,s := range str { fmt. Printf("Unicode %c,%d n",s,s) } 输出结果 ASCII ?,230 ASCII ?,136 ASCII ?,1)">145 ASCII ?,1)"> ASCII ?,1)">152 ASCII ˉ,1)">175 ASCII,1)">32 ASCII a,1)">97 ASCII b,1)">98 ASCII c,1)">99 ASCII d,1)">100 Unicode 我,1)">25105 Unicode 是,1)">26159 Unicode,1)"> Unicode a,1)"> Unicode b,1)"> Unicode c,1)"> Unicode d,1)">100 可以看到以ASCII方式插入的代码是有乱码的,我们可以以unicode方式打印处理. 这两者的区别在于使用哪一种for循环 ASCII: 使用for 下标遍历,后面的数字表示的是在ASCII中的编码.? Unicode: 使用 for range遍历. 后面的数字表示的是,在unicode中的编码 ? 扩展:?UTF-8 和 Unicode 有何区别? Unicode 与 ASCII 类似,都是一种字符集。
参考:?http://c.biancheng.net/view/18.html 3. 类型强转 1 //类型强转 2 str := "这是一个aaa" 3 bytestr := []byte(str) 4 fmt.Println(bytestr) 5 fmt.Println(string(bytestr)) a. string强转成byte: []byte(str) b. byte强转成string: string(byte) ?4. 高效字符串拼接方式 1 字符串拼接 2 hammer := 吃我一锤 3 sickle := 死吧 4 5 /** 普通字符串拼接方式 */ 6 hammer += sickle 7 fmt.Println(hammer) 8 fmt.Println(sickle) 9 10 * 高效字符串连接的方式 11 声明字节缓冲区 12 var stringBuilder bytes.Buffer 13 14 把字符串写入缓冲 15 stringBuilder.WriteString(hammer) 16 stringBuilder.WriteString(sickle) 17 18 将缓冲以字符串形式输出 19 fmt.Println(stringBuilder.String()) 输出: 吃我一锤死吧 3 死吧 4 吃我一锤死吧死吧 简单的东西未必高效。除了加号连接字符串,Go 语言中也有类似于 StringBuilder 的机制来进行高效的字符串连接 5. 常用的一些格式化样式中的动词及功能 | 动 ?词 | 功 ?能 | %v 按值的本来值输出 %+v 在 %v?基础上,对结构体字段名和值进行展开 %#v 输出 Go 语言语法格式的值 %T 输出 Go 语言语法格式的类型和值 %% 输出 %?本体 %b 整型以二进制方式显示 %o 整型以八进制方式显示 %d 整型以十进制方式显示 %x 整型以十六进制方式显示 %X 整型以十六进制、字母大写方式显示 %U Unicode?字符 %f 浮点数 %p 指针,十六进制方式显示
---|