加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

go string类型的特性

发布时间:2021-05-21 06:24:20 所属栏目:大数据 来源: https://www.jb51.cc
导读:参考文章:?http://c.biancheng.net/view/36.html 1. 获取ascii类型字符的长度个数和获取utf8类型字符长度的个数 a. len("咪咪")? //return 6 这获取的是ASCII长度 b.utf8.RuneCountInString("咪咪") // return 2获取的是utf8汉字长度个数 2. 字符串遍历,以AS
%v 按值的本来值输出 %+v 在 %v?基础上,对结构体字段名和值进行展开 %#v 输出 Go 语言语法格式的值 %T 输出 Go 语言语法格式的类型和值 %% 输出 %?本体 %b 整型以二进制方式显示 %o 整型以八进制方式显示 %d 整型以十进制方式显示 %x 整型以十六进制方式显示 %X 整型以十六进制、字母大写方式显示 %U Unicode?字符 %f 浮点数 %p 指针,十六进制方式显示

6.

7.

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

参考文章:?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 类似,都是一种字符集。

字符集为每个字符分配一个唯一的 ID,我们使用到的所有字符在 Unicode 字符集中都有一个唯一的 ID,例如上面例子中的 a 在 Unicode 与 ASCII 中的编码都是 97。汉字“你”在 Unicode 中的编码为 20320,在不同国家的字符集中,字符所对应的 ID 也会不同。而无论任何情况下,Unicode 中的字符的 ID 都是不会变化的。

UTF-8 是编码规则,将 Unicode 中字符的 ID 以某种方式进行编码,UTF-8 的是一种变长编码规则,从 1 到 4 个字节不等。编码规则如下:

  • 0xxxxxx 表示文字符号 0~127,兼容 ASCII 字符集。
  • 从 128 到 0x10ffff 表示其他字符。


根据这个规则,拉丁文语系的字符编码一般情况下每个字符占用一个字节,而中文每个字符占用 3 个字节。

广义的 Unicode 指的是一个标准,它定义了字符集及编码规则,即 Unicode 字符集和 UTF-8、UTF-16 编码等。

参考:?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. 常用的一些格式化样式中的动词及功能

表:字符串格式化时常用动词及功能
动 ?词 功 ?能
    推荐文章
      热点阅读