Go语言 有丰富的数据类型, 除了基本的 整形、浮点型、布尔型、字符串型,还有数组、切片、struct、函数、map、通道(channel)等。总体来说,Go语言的基本数据类
型和其他语言大同小异。
整型
整型分为有符号整型和无符号整型两类
有符号整型 无符号整型
int8 uint8
int16 uint16
int32 uint32
int64 uint64
其中, uint8 对应 byte 类型, int16 对应 c语言 中 short 类型, int64 对应 C语言 中的 long 类型。
实例:
//有符号整型
var num int //可以是负数
num = -32
fmt.Println(num) // 结果为: -32
//无符号整型
var age uint //不能是负数, 赋值负数报错
age = 18
fmt.Println(age) // 结果为: 18
//无符号整型
var u_num uint //不能是负数, 赋值负数报错
u_num = -18
fmt.Println(u_num) // 结果报错: cannot use -18 (untyped int constant) as uint value in assignment (overflows)
此外, 还有三种特殊整型:
uint: 在 32位操作系统中相当于 uint32, 在 64位操作系统中相当于 uint64
int: 在 32位操作系统中相当于 int32, 在 64位操作系统中相当于 int64
uintptr: 无符号整形, 用于存放一个指针, 在 32位操作系统中相当于 uint32, 在 64位操作系统中相当于 uint64
浮点型
Go语言 支持 float32与float64两种变量, 其数据格式遵循 IEEE 754 标准
float32: 最大值约为3.4 * 10^38, 可以使用常量 math.MaxFloat32 表示
float64: 最大值约为1.8 * 10^308, 可以使用常量 math.MaxFloat64 表示
注意: 使用类型推断方式声明浮点数型变量时, 变量会被推断为 float64
实例:
var f float64
f = 3.14
fmt.Println(f) // 结果为3.14
复数
Go语音 内置的复数为 complex64 和 complex128 。其使用两个浮点数表示复数的实部和虚部, complex64 的实部和虚部都是 float32, complex128 的实部和虚部都是 float64。
实例:
//注意: 复数输出时, 程序会以括号表示这是一个复数
var c1 complex128
c1 = 1 + 2i
c2 := 2 + 4i
fmt.Println(c1, c2)
并且 Go语言 内置了三个与复数操作相关的函数
实例:
c := complex(1.2, 3.4) // 构造复数 c (1.2 + 3.4i)
fc1 := real(c) // 获取到实部 1.2
fc2 := imag(c) // 获取到虚部 3.4
字面量
Go语言 支持 二进制, 十进制, 八进制, 十六进制 浮点数的格式定义数字
实例:
v1 := 0b11 //二进制
v2 := 0o11 //八进制
v3 := 0x522 //十六进制
fmt.Println(v1, v2, v3) //得到结果 5 9 82
布尔型
Go语言的布尔类型变量的默认值为 false, 且Go语言不允许将整形强制转换为布尔型
布尔型无法参与数值运算, 也无法与其他类型相互转换
实例:
var no bool
ok := true
fmt.Println(no, ok) // false, true
字符类型
组成每个字符串的元素叫作字符, 可以通过遍历或当获取字符串元素获得。使用单引号声明
Go语言的字符有两种类型, 其中 byte 代表 ASCII 码的一个字符, rune 表示一个utf-8字符
byte 和 rune 本质上都是整型, 为了方便编程, Go语言给出了两个别名
其中 byte 是 uint8 的别名, rune 是 int32 的别名
实例:
var b1 = 'a' // 字符变量默认类型为 rune 型
var b2 byte = 'b' // byte型, 本质上是 uint8
b3 := '鲲' // rune 型, 本质上是 int32
fmt.Println(b1, b2, b3) // a, b, 鲲
字符串类型
Go语言中
单行字符串 以双引号(" ")定义
多行字符 以反引号(`)定义
Go语言字符串的内部使用 utf-8 编码实现, 可以在源码中直接添加非 ASCII 码
实例:
var s1 string = "马頔" // 定义单行字符串
var s2 string = `在冰雪融化的
早晨`
fmt.Println(s1)
fmt.Println(s2)
1487

被折叠的 条评论
为什么被折叠?



