Go语言中的多语言文本

Go语言中的多语言文本

声明字符串

字符串的三种定义方式:

str1 := "str1"
var str2 = "str2"
var str3 string = "str3"

字符串的零值

声明字符串但没有给它赋值:

var kong string

字符串的零值是""(双引号之间什么也没有)

字符串字面值/原始字符串字面值

  • 字符串字面值可以包含转义字符,例如 \n
  • 但如果你确实想得到 \n 而不是换行的话,可以使用 `` (Esc下面的反引号)来代替 “ ” ,这叫做原始字符串字面值
字符串字面值(string literal)

例子1

fmt.Println("家人们,\n谁懂啊")

输出结果:

家人们,
谁懂啊
原始字符串字面值(raw string literal)

例子2

fmt.Println(`家人们,\n谁懂啊`)

输出结果:

家人们,\n谁懂啊

例子2

fmt.Println(`
家人们
谁懂啊`)

输出结果:


家人们
谁懂啊

由以上对比结果可知,``(反引号)是原封不动将引号内的内容输出出来,不使用转义字符转义

小测试

输出一个D:\go\test

字符,code points,runes,bytes

  • Unicode联盟为超过 100 万个字符分配了相应的数值,这个数叫做code point

    • 例如:65代表 “A” ,49代表 “1”,128515代表 "笑脸
  • 为了表示这样的 Unicode code point,Go语言提供了 rune(符文)这个类型,它是 int32 的一个类型别名

  • byteuint8 类型的别名,目的是用于二进制数据

    • byte 倒是可以表示由 ASCII 定义的英语字符,它是 Unicode 的一个子集(共128个字符)
类型别名
  • 类型别名就是同一个类型的另一个名字

    • 所以,rune 和 int32 可以互换使用
  • 也可以自定义类型别名,语法如下

    type byte = uint8
    type rune = int32
    
打印
  • 如果想打印字符而不是数值,使用 %c 格式化动词

  • 任何整数类型都可以使用 %c 打印,但是 rune 意味着该数值表示了一个字符

例子

var pi rune = 960
var alpha rune = 940
var omega rune = 969
var bang byte = 33

fmt.Printf("%v %v %v %v\n", pi, alpha, omega, bang)
	// 960 940 969 33
fmt.Printf("%c %c %c %c\n", pi, alpha, omega, bang)
	// π ά ω !

利用 %v 是直接打印出它的数值,rune 是 int32 ,byte 是 uint8

字符
  • 字符字面值使用 ’ ’ (单引号)括起来,例如:’A‘
  • 如果没指定字符类型的话,那么Go会推断它的类型为 rune

例子

grade := 'A'
var grade1 = 'A'
var grade2 rune = 'A'
  • 这里的 grade 仍然包含一个数值,例子中就是 65,它是 A 的code point
  • 字符字面值也可以用 byte 类型:var star byte = '*'
小测试
  • ASCII 编码里包含了多少个字符?

  • rune 和 byte的类型别名分别是什么?

  • 等于号和感叹号的code point分别是多少?(不要去查看表格,利用Go语言)

string

可以给某个变量赋予不同的 string 值,但是 string 本身是不可变的

例子

var message = "hello"
c := message[4]		// 字符串可以看做是字符数组,这里取索引下标为4的元素
fmt.Printf("%c", c) // o
message[4] = 'c'	// 字符串本身是不可变的,不可修改,会报错
小测试

写个程序,打印出helloworld的每个字符,每个字符独占一行

提示:len()可以获取字符串长度

凯撒加密法

  • 对于加密信息,一种简单有效的办法就是把每个字母都移动固定长度的位置
    • 例如:a -> d,b -> e

简单实现

c := 'a'
c = c + 3
if c > 'z' {
	c = c - 26
}
fmt.Printf("%c", c)
小测试
  • 这个语句的作用是什么?c = c - ‘a’ + ‘A’
  • 如果 c 是 ‘g’ ,那么 c 执行完第一问的代码结果是什么?

UTF-8

  • Go 中的字符串是用 UTF-8 编码的,UTF-8 是 Unicode Code Point 的几种编码之一
  • UTF-8 是一种有效率的可变长度的编码,每个 code point 可以是 8 位、16 位或 32 位
  • 通过使用可变长度编码,UTF-8 使得从 ASCII 的转换变得简单明了,因为 ASCII 字符与其 UTF-8 编码的对应字符是相同的
  • UTF-8 是万维网的主要字符编码。它是由 Ken Thompson 于1992年发明的,他也是Go语言的设计者之一

range

使用 range 关键字,可以遍历各种集合

例子

str := "你好,Tom"
for i, c := range str {
	fmt.Printf("%v %c\n", i, c)
}		// i得到的是索引,这个是区分8位,16位,32位的

运行结果:

036 ,
7 T
8 o
9 m

由此可见,中文你好是32位的,而英文逗号和英文Tom是8位的

本次关于Go语言中的多语言文本的学习笔记,就分享结束了,都是比较基础的内容,希望可以帮助到大家,小测试的答案发布在评论区,答案不唯一,只是做为参考

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值