前言
本文主要介绍 golang 的几种常用的基本数据类型,如整型,浮点型,字符,字符串,布尔型等,并介绍了一些常用的类型转换操作。
Golang 是一种强类型语言,变量使用时需要进行强制类型定义,一旦某一个变量被定义,如果不经强制转换,那么它永远就是该类型。
文章目录
变量声明及初始化
Golang 推荐使用驼峰式命名,如 QuoteRuneToASCII 和 parseRequestLine 等。
定义变量的几种形式:
// 第一种,先声明类型,再进行初始化赋值
// 如果没有初始化,则变量默认为零值。
var a int
a = 3
// 第二种, 根据赋值自动适配类型
b := 3 // 这种写法只能在函数体中出现
// 效果等价于 var b = 3, 但后者可以在函数体之外的地方使用
// 第三种,声明类型的同时进行赋值
var c int = 3
// 第四种,使用 new 创建变量,然后返回变量的地址,类型为 *type
p := new(int)
*p = 3
// 与 python 相同,交换两个变量的值,可以使用 a, b = b, a
// 但与 python 不同的是两个变量的类型必须是相同的。
注意:
- Golang 中不允许出现未使用的变量,否则会报错 a declared and not used。但是全局变量是允许声明但不使用。
- Golang 的封装性由变量名第一个字母决定,大写字母开头的变量是可导出的变量,可以在包外使用,小写字母或者下划线开头的变量只能在本包内使用。
- “:=” 是一个变量声明语句,而 “=‘ 是一个变量赋值操作,一行中简短声明多个变量时,":=" 语句中必须至少要声明一个新的变量。
基本数据类型
获取元素类型
// 方法一,创建 reflect 变量
import "reflect"
var a int
typeOfA := reflect.TypeOf(a)
fmt.Println(typeOfA)
// 或者直接 fmt.Println(reflect.TypeOf(a))
// 方法二,使用 fmt 查看
import "fmt"
var a int
fmt.Printf("%T", a) // 注意不能用 Println
整型
数字表示类型的比特长度,不同长度的类型是独立的,混合计算会报错
int 的长度由硬件决定:
数据类型 | 计算机架构 | 比特宽度 | 字节宽度 |
---|---|---|---|
int | 32位 | 32 | 4 |
int | 64位 | 64 | 8 |
uint | 32位 | 32 | 4 |
uint | 64位 | 64 | 8 |
也可以指定 int 的固定长度类型:
数据类型 | 比特宽度 |
---|---|
int8 | 8 |
int16 | 16 |
int32 (rune, 可以用来表示一个 Unicode 字符) | 32 |
int64 | 64 |
uint8 (byte) | 8 |
uint16 | 16 |
uint32 | 32 |
uint64 | 64 |
浮点类型
Golang 支持两种浮点型数值:float32 和 float64。可以使用 math 包中的常量获取浮点类型的边界值
const (
MaxFloat32 = 3.40282346638528859811704183484516925440e+38 // 2**127 * (2**24 - 1) / 2**23
SmallestNonzeroFloat32 = 1.401298464324817070923729583289916131280e-45 // 1 / 2**(127 - 1 + 23)
MaxFloat64 = 1.797693134862315708145274237317043567981e+308 // 2**1023 * (2**53 - 1) / 2**52
SmallestNonzeroFloat64 = 4.940656458412465441765687928682213723651e-324 // 1 / 2**(1023 - 1 + 52)
)
注意:浮点类型有精度限制,计算结果不准确,不推荐使用
需要进行浮点计算时,可以使用放大 100 倍的整数计算,计算完成再将结果缩小 100 倍
复数
Golang 自带了复数类型,分别为 complex64, complex128,定义时需要制定实部和虚部,如:
var c1, c2 complex64
c1 = 1 + 2i