golang中byte和runne 类型

简介

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

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值