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。


640.png


字符串操作

  • 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)
}


完整代码:

640.png


输出结果:

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





目录
相关文章
|
3天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
31 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
23天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
37 7
|
23天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
23天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
97 71
|
22天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
102 67
|
25天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
94 62
|
27天前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
23天前
|
存储 Go
go语言中映射
go语言中映射
35 11
|
25天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
33 12
|
24天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
30 9