Go 语言学习之基础数据类型
时间:2022-07-22
本文章向大家介绍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:%Tn", a, a)
fmt.Printf("b=%d type:%Tn", b, b)
fmt.Printf("c=%d type:%Tn", c, c)
fmt.Printf("d=%d type:%Tn", d, d)
fmt.Printf("e=%d type:%Tn", 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:%Tn", f, f)
fmt.Printf("g=%g type:%Tn", g, g)
}
03
布尔类型
bool 型的值只有两种可能,true 和 false,在 Go 语言中,bool 型的零值是 false,布尔值无法隐式转换成数值 0 或 1,反之亦然。
var h bool
func main() {
fmt.Printf("h=%t type:%Tn", 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:%Tn", i, i)
i = "hello golang"
fmt.Printf("字符串 i 的长度:%dn", len(i))
fmt.Printf("字符串 i 的第一个字符:%cn", i[0])
j := i[0:5]
fmt.Printf("子字符串 j 的值:%sn", j)
k := i[5:]
fmt.Printf("子字符串 k 的值:%sn", k)
l := i[:5]
fmt.Printf("子字符串 l 的值:%sn", l)
m := i[:]
fmt.Printf("子字符串 m 的值:%sn", m)
n := "hello "
o := "world"
p := n + o
fmt.Printf("连接字符串 p 的值:%sn", 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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- DietPi配置问题(2)
- 什么是死锁?如何解决死锁?
- Mac终端配置oh-my-zsh
- 聊聊dubbo-go的leastActiveLoadBalance
- ThreadLocal与InheritableThreadLocal
- 每天学点JavaScript基础(1)—— null 和 undefined
- 每天学点JavaScript基础(2)——JavaScript里的分号,你加还是不加?
- Flutter中async与await异步编程原理分析
- 在树莓派上使用360WIFI
- Orange PI Zero OpenWrt固件
- 定制用于日常使用的树莓派系统
- adb网络调试重启后不关闭得方法
- Mac版VsCode不能主动更新问题
- TensorFlow安装
- AQS原理分析