简介
golang中字符属于int类型,当我们直接输出 byte(字符)的时候输出的是这个字符对应的ASCII码值
使用
1. 直接输出值可以看见输出的是码值,类型int32
package main
import "fmt"
func main() {
var a = 'a'
fmt.Printf("值:%v, 类型:%T\n", a, a)//值:97, 类型:int32
fmt.Printf("值:%c, 类型:%T\n", a, a)//值:a, 类型:int32
}
2. 输出字符串中的字符
package main
import "fmt"
func main() {
var str = "this"
fmt.Printf("值:%v, 类型:%T\n", str[2], str[2])//值:105, 类型:uint8
fmt.Printf("值:%c, 类型:%T\n", str[2], str[2])//值:i, 类型:uint8
}
3. 输出汉字
一个汉字占用3个字节(utf-8),一个字母占用1个字节;
unsafe.Sizeof()
没法查看string类型数据所占用的存储空间,使用 len()
可以查看长度。
package main
import "fmt"
func main() {
var a = '国'
fmt.Printf("值:%v, 类型:%T\n", a, a)//Unicode编码10进制,值:22269, 类型:int32
fmt.Printf("原样输出:%c, 类型:%T\n", a, a)//原样输出:国, 类型:int32
}
4. 输出字符串
(1)for循环输出
package main
import "fmt"
func main() {
s := "你好,golang"
for i := 0; i < len(s); i++ {//byte
fmt.Printf("%v(%c) ", s[i], s[i])
}
//结果:
//228(ä) 189(½) 160( ) 229(å) 165(¥) 189(½) 239(ï) 188(¼) 140(Œ) 103(g) 111(o) 108(l) 97(a) 110(n) 103(g)
}
for循环输出的是byte类型;
(1)range循环输出
package main
import "fmt"
func main() {
s := "你好,golang"
fmt.Println()
for _, v := range s {//runne
fmt.Printf("%v(%c) ", v, v)
}
//结果:
//20320(你) 22909(好) 65292(,) 103(g) 111(o) 108(l) 97(a) 110(n) 103(g)
}
range循环输出的是runne类型;
5. 修改字符串
要修改字符串,需要先将其转换成[]runne
或[]byte
,完成后再转换为string
。无论哪种转换都会重新分配内存,并复制字节数组。
package main
import "fmt"
func main() {
//全是字母的字符串
s1 := "big"
bt := []byte(s1)//强制转换
bt[0] = 'p'//修改值
s1 = string(bt)//转换为string
fmt.Printf("%v, 类型:%T\n", s1, s1)//pig, 类型:string
//有汉字的字符串
s2 := "您好 golang"
rn := []rune(s2)
rn[0] = '他'
s2 = string(rn)
fmt.Printf("%v, 类型:%T\n", s2, s2)//他好 golang, 类型:string
}