引入

数据类型分基本类型和复合类型,基本类型是语言最底层的 building block。Go 的基本类型不多,就四类:整型、浮点型、布尔型、字符串。每一类都有固定的大小和行为,搞清楚了才能选对类型、避免溢出和精度问题。

正文

定义

定义

Go 基本类型包括整型int8int64uint8uint64intuint)、浮点型float32float64)、布尔型bool)和字符串string)。它们是 Go 语言内置的、不可再拆分的数据类型。

语法

// 整型
var a int = 100
var b int64 = 9999999999
 
// 浮点型
var pi float64 = 3.14159
 
// 布尔型
var ok bool = true
 
// 字符串
var name string = "Go"

例子

整型

var (
    a int8  = 127       // -128 ~ 127
    b int16 = 32767     // -32768 ~ 32767
    c int32 = 2147483647
    d int64 = 9223372036854775807
    e uint8 = 255       // 0 ~ 255
    f uint16 = 65535    // 0 ~ 65535
)
类型位宽范围
int88-128 ~ 127
int1616-32768 ~ 32767
int3232-2^31 ~ 2^31-1
int6464-2^63 ~ 2^63-1
uint880 ~ 255
uint16160 ~ 65535
uint32320 ~ 2^32-1
uint64640 ~ 2^64-1
int平台相关32 位或 64 位
uint平台相关32 位或 64 位
uintptr平台相关足够存放指针

日常开发直接用 int 就行,只有在处理二进制数据、网络协议、或者需要精确控制大小时才用其他类型。

浮点型

var f32 float32 = 3.14     // 精度约 7 位
var f64 float64 = 3.141592653589793  // 精度约 15 位
 
fmt.Println(f32, f64)
// 3.14 3.141592653589793

Go 只有 float32float64 两种浮点类型。绝大多数场景用 float64,精度更高,类型推断的默认浮点类型也是 float64

x := 3.14  // 自动推断为 float64

布尔型

var isActive bool = true
var isDeleted bool = false
 
if isActive {
    fmt.Println("激活状态")
}

bool 只有 truefalse 两个值,不能和整数互转(不像 C 语言 0 就是 false)。详见 Go 布尔值

字符串

var s1 string = "hello"
var s2 string = `raw string, \n 不会被转义`
 
fmt.Println(s1, s2)

字符串是 UTF-8 编码的不可变字节序列,详见 Go 字符串

类型推断的默认类型

a := 42       // int
b := 3.14     // float64
c := true     // bool
d := "hello"  // string
e := 'A'      // rune (int32)
字面量形式默认推断类型
42int
3.14float64
true / falsebool
"hello"string
'A'rune(即 int32

常见写法

写法说明
var x int = 10显式指定整型
var x = 10类型推断为 int
x := 10短变量声明,推断为 int
var f float64 = 3.14显式指定浮点型
f := 3.14类型推断为 float64
var b bool = true显式布尔值
var s string = "hi"显式字符串
s := + “raw” + `原始字符串(不转义)

特点

  • int最常用的整型,除非有特殊需求否则不要指定 int32int64
  • float64默认浮点类型,精度更高
  • bool 只能是 truefalse,不能和整数互转
  • string不可变的,修改字符串实际上是创建新字符串
  • 不同类型之间必须显式转换,Go 没有隐式类型转换
  • 整型溢出在编译期会报错(常量),运行时会 wrap around(变量)

理解

Go 的基本类型设计得很精简,没有 C 语言那种 shortlonglong long 的混乱。整型就用 int,浮点就用 float64,布尔就是 bool,文本就是 string。类型推断让代码更简洁,但默认类型要记住。不同类型之间必须显式转换,这是 Go 强类型的核心体现。

引出

基本类型里,字符串是用得最多也是最特别的类型。它虽然看起来像基本类型,但底层是字节序列。接下来看 Go 字符串,深入了解字符串的创建、操作和底层原理。