专栏首页Golang语言开发栈Go 语言学习之基础数据类型

Go 语言学习之基础数据类型

01

整数类型

整数类型按照有/无符号划分,可分为有符号整数和无符号整数,二者按照大小划分,有 8 位、16 位、32 位和 64 位:

大小

8 位

16 位

32 位

64 位

有符号

int8

int16

int32

int64

无符号

uint8

uint16

uint32

uint64

此外,还有两种整数类型,分别是 int 和 uint,其大小与原生的有/无符号整数类型相同,都是 32 位或 64 位。

其中,int32 和 uint8 分别有类型别名是 rune 和 byte,二者可互换使用。需要注意的是,int 和 uint 都有别于大小明确的类型,也就是说,int 和 int32 是两种不同的类型,必须显示转换。

var a int
var b int32
var c rune
var d byte
var e uint8

func main() {
  fmt.Printf("a=%d type:%T\n", a, a)
  fmt.Printf("b=%d type:%T\n", b, b)
  fmt.Printf("c=%d type:%T\n", c, c)
  fmt.Printf("d=%d type:%T\n", d, d)
  fmt.Printf("e=%d type:%T\n", e, e)

  if c == b {
    fmt.Println("rune 类型是 int32 的类型别名,二者可以互换使用")
  }

  if d == e {
    fmt.Println("byte 类型是 uint8 的类型别名,二者可以互换使用")
  }
}

02

浮点数类型

浮点数类型有两种,分别是 float32 和 float64,大多数情况下,建议优先使用 float64,因为 float32 的运算容易产生误差。

var f float32
var g float64

func main() {
  fmt.Printf("f=%g type:%T\n", f, f)
  fmt.Printf("g=%g type:%T\n", g, g)
}

03

布尔类型

bool 型的值只有两种可能,true 和 false,在 Go 语言中,bool 型的零值是 false,布尔值无法隐式转换成数值 0 或 1,反之亦然。

var h bool

func main() {
  fmt.Printf("h=%t type:%T\n", h, h)
}

04

字符串类型

字符串是不可变的带双引号的字节序列,它可以包含任意数据,包括 0 值字节,不可变意味着多个字符串可以共享一块内存空间。

如图所示,同一块内存空间,包含字符串 s 、字符串 hello 和字符串 world。

字符串操作:

  • len 函数 内置的 len 函数返回字符串的字节数,并非字符的个数,UTF-8 的简体中文,一个字符占三个字节。
  • 下标访问字符 通过下标访问字符串,可以得到第 i 个字符。
  • 子串生成 子串生成操作 s[i:j] 产生一个新字符串,内容取自原字符串的字节,下标从 i (含边界值)开始,直到 j(不含边界值)。新字符串的大小是 j-i 个字节。 需要注意的是,如果下标越界,或者 j 的值小于 i,将触发宕机异常。 操作数 i 和 j 的默认值分别是 0 [字符串的起始位置]和 len(s) [字符串的终止位置],如果省略 i 或 j,或两者都省略,则取默认值。
  • 字符串连接 加号(+)运算符连接两个字符串而生成一个新字符串。
var i string

func main() {
  fmt.Printf("i=%s type:%T\n", i, i)
  
  i = "hello golang"
  fmt.Printf("字符串 i 的长度:%d\n", len(i))
  fmt.Printf("字符串 i 的第一个字符:%c\n", i[0])
  j := i[0:5]
  fmt.Printf("子字符串 j 的值:%s\n", j)
  k := i[5:]
  fmt.Printf("子字符串 k 的值:%s\n", k)
  l := i[:5]
  fmt.Printf("子字符串 l 的值:%s\n", l)
  m := i[:]
  fmt.Printf("子字符串 m 的值:%s\n", m)
  n := "hello "
  o := "world"
  p := n + o
  fmt.Printf("连接字符串 p 的值:%s\n", p)
}

完整代码:

输出结果:

a=0 type:int
b=0 type:int32
c=0 type:int32
d=0 type:uint8
e=0 type:uint8
f=0 type:float32
g=0 type:float64
h=false type:bool
i= type:string
rune 类型是 int32 的类型别名,二者可以互换使用
byte 类型是 uint8 的类型别名,二者可以互换使用
字符串 i 的长度:12
字符串 i 的第一个字符:h
子字符串 j 的值:hello
子字符串 k 的值:golang
子字符串 l 的值:hello
子字符串 m 的值:hello golang
连接字符串 p 的值:hello world

本文分享自微信公众号 - Go语言开发栈(golanghubcn),作者:frankphper

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go 语言学习之常量

    常量是一种表达式,常量的计算可以在编译时完成,如果有错误,在编译时就会报错,常量的值不可以修改。

    frankphper
  • Go 语言学习之 goroutine 和 channel

    当一个 go 程序运行时,调用 main 函数入口的 goroutine 是主 goroutine,我们还可以使用关键字 go 创建新的 goroutine。在...

    frankphper
  • Golang语言之字符串操作

    frankphper
  • Learning ROS for Robotics Programming Second Edition学习笔记(三) 补充 hector_slam

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865

    zhangrelay
  • 面向对象(二十七)-Socket TCPListener

    雷潮
  • 图解剑指 offer 第二题: 替换空格

    请实现一个函数,将一个字符串中的每个空格替换成 “%20” 。例如,当字符串为 We Are Happy 。则经过替换之后的字符串为 We%20Are%20H...

    五分钟学算法
  • 折叠屏手机的相关知识

    折叠手机是智能手机的一种造型,柔性AMOLED屏幕是折叠手机的突破关键。智能手机行业迎来“折叠屏时代”,各大手机厂商积极布局。早在2018年10月底,国内柔性屏...

    用户5777378
  • 【从零开始学习Go语言】九.Go语言之变量常量及指针总结

    所谓指针其实你可以把它想像成一个箭头,这个箭头指向(存储)一个变量的地址 因为这个箭头本身也需要变量来存储,所以也叫做指针变量。

    一只特立独行的兔先生
  • smartGit长期使用批处理脚本

    看到网上很多实现smartgit简单破解的方法,其实就是删除smartgit配置文件,让smartgit还可以试用一个月,依此循环达到一直使用,不过,每个月都要...

    SmileNicky
  • CSS进阶03-定位体系,格式化上下文,常规流

    (注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

    love丁酥酥

扫码关注云+社区

领取腾讯云代金券