字符类型
大约 2 分钟
字符类型
字符类型
Go像C的Char那样的字符类型,但可以用byte类型保存 (等价uint8),如果是中文等更大的字集则可以用更大的无符号整形来存储。
Go的字符使用的是utf-8编码,查看 utf-8 编码表:http://www.mytju.com/classcode/tools/encode_utf8.asp
(这里需要注意C的char类型可以是有符号也可以是无符号的,虽然C99中定义成有符号的,但具体还是要根据编译器而定,更类似int8_t而非uint8_t。而Go这里是约定用uint8来表示的)
定义+赋值:
var c1 byte = 'a' // 97
var c2 byte = '6' // 54
var c3 byte = '(' + 20 // 40 + 20
var c4 byte = '中' // 报错,溢出,对应的10进制unicode为20013
var c4 int = '中' // 正确
// 字符类型本质上是整数,直接打印则出来的是数字,也可以直接参数运算
// 赋值的话,字母 数字 标点 汉字等会转Unicode码值码然后再赋值 (其中unicode的0~127范围和ascii码是一样的)
打印:需要使用格式化输出
var c5 byte = 'A'
fmt.Printf("对应字符:%c", c5)
字符串类型
两个特殊点:
- Go语言字符类型不存在,所以这里的字符串本质上是整形串。不过比整形类型好点的是直接打印出来是字符串
- 在Go里字符串居然是基本数据类型,其他语言基本不属于
- 字符串不可变 (这点和Python中的"不可变"的意思是一样的),内存不可变,但可以让指针指向另一内存
定义
var s1 string = "你好世界"
fmt.Println(s1)
var s3 string = 'abc"abc' // 不合法
var s3 string = "abc\"abc" // 合法
var s3 string = `abc"a
bc` // 合法,反引号的使用类似Js,或类似Python raw string
方法
// 赋值。注意Go的字符串是不可变的
var s2 string = "abc"
s2 = "cba" // 合法
s2[0] = "t" // 不合法
fmt.Println(s2)
// 拼接
var s5 string = "abc" + "def"
s5 += "g" + // 需要注意,由于go的自动加分号特性,这里的加号【必须】在上一行的末尾处
"hijk" // (与其他语言不同:Google C++、Python PEP8、Airbnb Js、Oracle Java等其他语言不强制,但都是这么建议的)
(更多方法详见 “模块库/字符串库”)