参考文章: 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, %d\n", str[i], str[i])
} // unicode码类型遍历
for _, s := range str {
  fmt. Printf("Unicode %c, %d \n", s, s)
}

  输出结果

ASCII  æ,
ASCII ˆ,
ASCII ‘,
ASCII æ,
ASCII ˜,
ASCII ¯,
ASCII ,
ASCII a,
ASCII b,
ASCII c,
ASCII d,
Unicode 我,
Unicode 是,
Unicode ,
Unicode a,
Unicode b,
Unicode c,
Unicode d,

可以看到以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. 类型强转

 //类型强转
str := "这是一个aaa"
bytestr := []byte(str)
fmt.Println(bytestr)
fmt.Println(string(bytestr))

a. string强转成byte: []byte(str)

b. byte强转成string: string(byte)

4. 高效字符串拼接方式

 //字符串拼接
hammer := "吃我一锤"
sickle := "死吧" /** 普通字符串拼接方式 */
hammer += sickle
fmt.Println(hammer)
fmt.Println(sickle) /** 高效字符串连接的方式 */
// 声明字节缓冲区
var stringBuilder bytes.Buffer //把字符串写入缓冲
stringBuilder.WriteString(hammer)
stringBuilder.WriteString(sickle) // 将缓冲以字符串形式输出
fmt.Println(stringBuilder.String())

输出:

 吃我一锤死吧
死吧
吃我一锤死吧死吧

  简单的东西未必高效。除了加号连接字符串,Go 语言中也有类似于 StringBuilder 的机制来进行高效的字符串连接

5. 常用的一些格式化样式中的动词及功能

表:字符串格式化时常用动词及功能
动  词 功  能
%v 按值的本来值输出
%+v 在 %v 基础上,对结构体字段名和值进行展开
%#v 输出 Go 语言语法格式的值
%T 输出 Go 语言语法格式的类型和值
%% 输出 % 本体
%b 整型以二进制方式显示
%o 整型以八进制方式显示
%d 整型以十进制方式显示
%x 整型以十六进制方式显示
%X 整型以十六进制、字母大写方式显示
%U Unicode 字符
%f 浮点数
%p 指针,十六进制方式显示

6.

7.

go string类型的特性的更多相关文章

  1. 从String类型字符串的比较到StringBuffer和StringBuilder

    1. String类型 String类源码 为了从本质上理解String类型的特性所在,我们从String类型的源码看起,在源码中String类的注释中存在以下: /**Strings are con ...

  2. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

  3. C#string类型总结

    字符串的特性:不可变性,每对字符串做拼接或者重新赋值之类的操作,都会在内存中产生一个新的实例.  所以说,在.Net平台下,如果你对一个字符串进行大量的拼接赋值等操作,会产生大量的垃圾.    --- ...

  4. java动手动脑和课后实验型问题String类型

    1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请 ...

  5. java内存分配和String类型的深度解析

    [尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...

  6. 利用自动类型转换存储string类型

    类型转换是我们最常用的功能.就像上战场用的枪一样,敌人用的冲锋枪, 自己手里就一把步枪,打起仗来始终有点不爽. 因此,基本功能的完善很重要. 通常情况下我们需要String类型转其它的基础类型.这时我 ...

  7. 可选参数、命名参数、.NET的特殊类型、特性

    1.可选参数和命名参数    1.1可选参数        语法:            [修饰符] 返回类型 方法名(必选参数n,可选参数n)        注意:            1.必选参 ...

  8. C++之string类型详解

    C++之string类型详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个泛型类出现,他集成的操作函 ...

  9. 【转】java内存分配和String类型的深度解析

    一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本 ...

随机推荐

  1. 「NOI2015」荷马史诗 (k叉huffman树/k叉合并果子)

    是个多叉huffman树,思想类比合并果子. 具体见 CrazyDave 的博客 CODE #include <bits/stdc++.h> using namespace std; ty ...

  2. QPS 和 TPS

  3. Verilog Tricks

    1,可用generate产生512*FIFO 2,Vivado的warning也要全部排除 3,小module测完再往大module加 4,复位和IDLE处的置零操作一定要写全了 5,设计通信接收机时 ...

  4. sql server 游标的知识

    一:认识游标   游标是SQL Server的一种数据访问机制,它允许用户访问单独的数据行.用户可以对每一行进行单独的处理,从而降低系统开销和潜在的阻隔情况,用户也可以使用这些数据生成的SQL代码并立 ...

  5. synchronized和AtomicXXX效率比较

    在Java中,i++和++i都是xian线程不安全的,如果要用十个线程累加一个资源,就会出现错误.synchronized和Atomic是实现线程安全常用方法.而二者效率问题孰优孰劣?本着规律符合任意 ...

  6. 7.26T1四分图匹配

    四分图匹配 题目描述 一天晚上,zzh 在做梦,忽然梦见了她. 见到她,zzh 也不去看她,只顾低头自语…… “噫,OI 这个东西,真是无奇不有.” “嘿,你又学了什么?” “嗯,学到了一种算法,”z ...

  7. Linux查看文件大小的几种方法

    ##stat命令 stat filepath xanarry@ThinkPad:/$ stat ~/Downloads/jdk-8u60-linux-x64.tar.gz File: '/home/x ...

  8. List的子类特点

    List的子类特点:  ArrayList:        底层数据结构是数组,查询快,增删慢        线程不安全,效率高  Vector:     底层数据结构是数组,查询快,增删慢     ...

  9. Java并发指南5:JMM中的final关键字解析

    本文转载自互联网,侵删   与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问.对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的 ...

  10. Linux生成key

    [root@centos7 ~]# ssh-keygen -b [ -t rsa #这里的-b 2048 是密钥加密的长度,最好设大点 Generating public/private rsa ke ...