聊聊golang字符类型(char)

基本介绍

Golang 中没有专门的字符类型,若是要存储单个字符(字母),通常使用 byte 来保存。字符串就是一串固定长度的字符链接起来的字符序列。Go 的字符串是由单个字节链接起来的。也 就是说对于传统的字符串是由字符组成的,而 Go 的字符串不一样,它是由字节组成的。golang

首先来打个基础,了解下字节类型:数组

// 官方源代码这样定义byte
// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8
复制代码

golang中字符类型使用,举个例子:ui

import (
	"fmt"
)

//演示golang中字符类型使用
func main() {
	
	var c1 byte = 'a'
	var c2 byte = '0' //字符的0

	//当咱们直接输出byte值,就是输出了的对应的字符的码值
	// 'a' ==> 
	fmt.Println("c1=", c1)
	fmt.Println("c2=", c2)
	//若是咱们但愿输出对应字符,须要使用格式化输出
	fmt.Printf("c1=%c c2=%c\n", c1, c2)

	//var c3 byte = '北' //overflpackage main
                                
	var c3 int = '北' //overflow溢出
	fmt.Printf("c3=%c c3对应码值=%d\n", c3, c3)
	}
复制代码

对上面代码说明编码

  • 若是咱们保存的字符在 ASCII 表的,好比[0-1, a-z,A-Z..]直接能够保存到 byte
  • 若是咱们保存的字符对应码值大于 255,这时咱们能够考虑使用 int 类型保存
var c3 byte = '北' // overflow溢出
复制代码

golang如何存储中文字符

Golang中是以utf-8形式编码的,英文占一个中文占三个,而一个带有中英文字符串是以byte数组形式存的,英文占一个数组元素,中文三个(若是是用byte存就会溢出也就是三个数组元素才能造成中文),因此你想打印这个字符串的其中一个中文须要转成rune类型才行spa

package main


import "fmt"

func main(){
	var c = "I love 中国"
	fmt.Println(c[2]) //108
	fmt.Println(string(c[2])) // l
	fmt.Println(string(c[7])) // 乱码 三个字节才能造成中文
	fmt.Println([]byte(c)) // [73 32 108 111 118 101 32 228 184 173 229 155 189]
	// 转化成rune类型数组
	c2:=[]rune(c)
	fmt.Println(c2) // [73 32 108 111 118 101 32 20013 22269]
	fmt.Println(string(c2[8])) // 中
	fmt.Println(string(c2[8])) // 国
}

复制代码

对上面的代码说明:code

  • 开题抛出byte类型存字符串 可是只是针对于英文状况下一个英文对应一个byte可是中文不必定,go以utf-8形式编码,而中文在utf-8是占三个字节,若是以byte类型存中文显然会溢出,因此为了解决上述状况,go用rune类型存
  • 字符串底层就是Byte数组
  • []byte方法和[]rune方法是将字符串转化成对应类型的slice(slice是引用类型,引用数组),string方法是转化为字符串

字符类型使用细节

  • 字符常量是用单引号('')括起来的单个字符。例如:var c1 byte = 'a' var c2 int = '中' var c3 byte = '9'utf-8

  • Go 中容许使用转义字符 '\’来将其后的字符转变为特殊字符型常量。例如:var c3 char = ‘\n’ // '\n'表示换行符unicode

  • 在 Go 中,字符(注意是字符不是字符串 字符串直接打印仍是显示字符串,可是打印单个字符就是整型了)的本质是一个整数,直接输出时,是该字符对应的 UTF-8 编码的码值字符串

  • 能够直接给某个变量赋一个数字,而后按格式化输出时%c,会输出该数字对应的 unicode 字符string

//能够直接给某个变量赋一个数字,而后按格式化输出时%c,会输出该数字对应的unicode 字符
	var c4 int = 22269 // 22269 -> '国' 120->'x'
	fmt.Printf("c4=%c\n", c4)
复制代码
  • 字符类型是能够进行运算的,至关于一个整数,由于它都对应有 Unicode 码.
//字符类型是能够进行运算的,至关于一个整数,运输时是按照码值运行
	var n1 = 10 + 'a' // 10 + 97 = 107
	fmt.Println("n1=", n1)
复制代码

字符类型本质探讨

  • 字符型 存储到 计算机中,须要将字符对应的码值(整数)找出来 存储:字符--->对应码值---->二进制-->存储 读取:二进制----> 码值 ----> 字符 --> 读取

  • 字符和码值的对应关系是经过字符编码表决定的(是规定好)

  • Go语言的编码都统一成了utf-8。很是的方便,很统一,再也没有编码乱码的困扰了

相关文章
相关标签/搜索