go语言基础语法- 字符和字节-字符串
前言
byte就是字节的意思,一个字节就是8个二进制位。uint8,无符号整形,占8位,正好也是2的8次方。所以byte和 uint8 类型本质上没有区别,它表示的是 ACSII 表中的一个字符。
go语言的字符和字节
测试byte和unit8的区别,本身是没有区别的
package mainimport "fmt"func main() {var x uint8x = 255fmt.Println(x)var y bytey = 255fmt.Println(y)var a bytea = 'A' //必须是单引号fmt.Println(a)fmt.Printf("%c : %d", a, a)}
package mainimport "fmt"func main() {var x uint8x = 255fmt.Println(x)var y bytey = 255fmt.Println(y)var a runea = '国'//rune,占用四个字符,工32位比特位,所以他和int32本质上也没有区别,他表示的是一个unicode字符fmt.Println(a)fmt.Printf("%c : %d", a, a)}
字符串和字节串(熟练掌握)
字节数组,就是一个数组,里面的每一个元素是字符,字符又跟字节划等号,所以字符串和字节串可以相互转换。
字符串与字节串之间的转换
这也是个编码和解码的过程
package mainimport ("fmt""reflect")func main() {var s = "中国"fmt.Println(s, reflect.TypeOf(s))// 下面是编码y := []byte(s)//[228 184 173 229 155 189] //中国两个字符,需要六个字节来存储, 中是 228,184,173fmt.Println(y, reflect.TypeOf(y)) // [] uint8}// 下面是解码fmt.Println(string(b) //中国
执行结果:
字符串的遍历
(2种方式)for 和range
package mainimport "fmt"func main() {var name = "itlaoxin is me "for i := 0; i < len(name); i++ {fmt.Println(name[i]) //这样取出来的是数字//解码fmt.Println(string(name[i]))fmt.Printf("%c"name[i])}}
如果name = " i am 老辛" 这种会出现什么问题呢?
答: 这个时候,如果我们用for循环遍历,以为一个中文是三个字符,所以会出现乱码,这时候就需要使用range
方法二:
package mainimport "fmt"func main() {name := "i am 老辛"for _, v := range name {fmt.Println(string(v))}}
go语言中的字符串字符不可以修改
package mainimport "fmt"func main() {name := "i am 老辛"fmt.Println(name[0])name[0] = "m" // 可以看到不允许修改}}