前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一篇文章带你了解Go语言基础之字节类型

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

作者头像
Go进阶者
发布2021-01-22 10:48:38
4510
发布2021-01-22 10:48:38
举报
文章被收录于专栏:Go语言进阶学习

上篇文章中我们学习了Go语言基础中的变量,一篇文章带你了解Go语言基础之变量,这篇文章我们继续介绍Go语言基础知识,今天跟大家分享的是基础数据类型之字节类型,一起来学习下吧~

前言

Hey,大家好呀,我是星期八,这次咱们继续学习Go基础之字节类型吧。

上文之字符串回顾

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

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

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

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

byte和rune类型

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

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

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

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

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

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

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

代码

代码语言:javascript
复制
package main

import "fmt"

func main() {
    var a byte = 'a'
    fmt.Println(a)
}

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

原因

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

代码语言:javascript
复制
package main

import "fmt"

func main() {
    var a rune = 'a'
    fmt.Println(a)
}

结果:

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

byte不能存中文

rune可以存中文

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

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

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

遍历字符串

方式一
代码语言:javascript
复制
package main

import "fmt"

func main() {
    s := "我是法外狂徒,张三,hahaha"
    for _, r := range s {
        fmt.Printf("%c \n",r)
}
}
方式二
代码语言:javascript
复制
package main

import "fmt"

func main() {
    s := "我是法外狂徒,张三,hahaha"
    for i := 0; i < len(s); i++ {
        //中文会乱码,不推荐
        fmt.Printf("%c \n",s[i])
}
}

修改字符串

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

代码语言:javascript
复制
package main

import "fmt"

func main() {
    //只有英文的情况下
    s1 := "hello world"
    var s1_byte_list = []byte(s1) //打散成字符列表
    s1_byte_list[6] = 'F'         //修改下表为6的字符为F
    s1 = string(s1_byte_list)     //打散的字符列表在组装成字符串
    fmt.Println(s1)               //输出 hello 6orld

    //带有中文的情况
    s2 := "天空好像下雨,我好像住你隔壁vay"
    var s2_rune_list = []rune(s2) //打散成utf-8字符列表
    s2_rune_list[5] = '雪'         //修改下表为5的字符为雪
    s2 = string(s2_rune_list)     //打散的utf8字符转字符串
    fmt.Println(s2)               //输出 天空好像下雪,我好像住你隔壁
}

总结

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go语言进阶学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 上文之字符串回顾
  • byte和rune类型
    • 定义个(字节)byte类型变量
      • 小朋友,是否有很多疑问???为什么是97
        • byte不能存中文
          • rune可以存中文
            • 遍历字符串
              • 方式一
              • 方式二
            • 修改字符串
            • 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档