文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一篇文章带你了解Go语言基础之字节类型

2024-12-02 20:25

关注

上文之字符串回顾

在上述文章中,我们学过了字符串类型。

在Go语言中,字符串类型是基本类型,在栈中存储,其结构如下。

可以看到,在Go中,字符串其实就是指向了一个连续的内存地址,并且记录了长度,读取是一次性读取出来的。

那么,如上图所示,内存里面存的一个个字母叫啥呢???

byte和rune类型

字符串是一个个字符拼接成的,反过来,也是一个个字符拼接成的字符串,而一个个的字符,就被称为字节(byte)。

字节占用1个字节大小,只能存字母了,标点符号之类的,不能存中文。

当然,存中文怎么办???在Go中有一个rune,和byte类似,本质和byte一样,只不过rune一个占用4个字节。

rune使用utf-8编码,可以存中文,各种语言。

所以,处理中文尽量用rune类型。

定义个(字节)byte类型变量

字符用单引号'号包裹起来。

代码

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     var a byte = 'a' 
  7.     fmt.Println(a) 

小朋友,是否有很多疑问???为什么是97

原因

byte代表的是一个ASCII码的一个字符,同理,rune可以理解为是byte的一个超集,向下兼容byte。

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     var a rune = 'a' 
  7.     fmt.Println(a) 

结果:

但是rune里面可以写中文,byte不行。

byte不能存中文

rune可以存中文

发现了吗,打印的竟然是一个数字?这是为啥???

就拿字母a来说,其实打印的是ASCII对应的数字,打印的是他的十进制。

同理,字符张也是,这里就不做例子了,因为utf-8表太大了。

遍历字符串

方式一

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     s := "我是法外狂徒,张三,hahaha" 
  7.     for _, r := range s { 
  8.         fmt.Printf("%c \n",r) 

方式二

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     s := "我是法外狂徒,张三,hahaha" 
  7.     for i := 0; i < len(s); i++ { 
  8.         //中文会乱码,不推荐 
  9.         fmt.Printf("%c \n",s[i]) 

修改字符串

同理,字符串相当于是字节列表组成的,是不能直接修改的,想要直接修改需要打散成字节列表才行。

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     //只有英文的情况下 
  7.     s1 := "hello world" 
  8.     var s1_byte_list = []byte(s1) //打散成字符列表 
  9.     s1_byte_list[6] = 'F'         //修改下表为6的字符为F 
  10.     s1 = string(s1_byte_list)     //打散的字符列表在组装成字符串 
  11.     fmt.Println(s1)               //输出 hello 6orld 
  12.  
  13.     //带有中文的情况 
  14.     s2 := "天空好像下雨,我好像住你隔壁vay" 
  15.     var s2_rune_list = []rune(s2) //打散成utf-8字符列表 
  16.     s2_rune_list[5] = '雪'         //修改下表为5的字符为雪 
  17.     s2 = string(s2_rune_list)     //打散的utf8字符转字符串 
  18.     fmt.Println(s2)               //输出 天空好像下雪,我好像住你隔壁 

总结

上述我们学习了Go基础之数据类型。如果在操作过程中有任务问题,记得下面讨论区留言,我们看到会第一时间解决问题。

我是码农星期八,如果觉得还不错,记得动手点赞一下哈。感谢你的观看。

本文转载自微信公众号「Go语言进阶学习」,可以通过以下二维码关注。转载本文请联系Go语言进阶学习公众号。

 

来源:Go语言进阶学习内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯