基础数据类型
整型
有符号整型
int8
int16
int32
int64
int
示例
Go
package main
import (
"fmt"
"math"
"unsafe"
)
// 有符号整型
func SymbolicInteger() {
var int8Val int8 = math.MaxInt8
var int16Val int16 = math.MaxInt16
var int32Val int32 = math.MaxInt32
var int64Val int64 = math.MaxInt64
var intVal int = math.MaxInt
fmt.Printf("int8Val的类型是 %T, int8Val的大小 %d, int8Val的值是 %d\n", int8Val, unsafe.Sizeof(int8Val), int8Val)
fmt.Printf("int16Val的类型是 %T, int16Val的大小 %d, int16Val的值是 %d\n", int16Val, unsafe.Sizeof(int16Val), int16Val)
fmt.Printf("int32Val的类型是 %T, int32Val的大小 %d, int32Val的值是 %d\n", int32Val, unsafe.Sizeof(int32Val), int32Val)
fmt.Printf("int64Val的类型是 %T, int64Val的大小 %d, int64Val的值是 %d\n", int64Val, unsafe.Sizeof(int64Val), int64Val)
fmt.Printf("intVal的类型是 %T, intVal的大小 %d, intVal的值是 %d\n", intVal, unsafe.Sizeof(intVal), intVal)
}
// 打印如下
// int8Val的类型是 int8, int8Val的大小 1, int8Val的值是 127
// int16Val的类型是 int16, int16Val的大小 2, int16Val的值是 32767
// int32Val的类型是 int32, int32Val的大小 4, int32Val的值是 2147483647
// int64Val的类型是 int64, int64Val的大小 8, int64Val的值是 9223372036854775807
// intVal的类型是 int, intVal的大小 8, intVal的值是 9223372036854775807
func main() {
SymbolicInteger()
}
TIP
- 我们通常应该使用
int
表示整型宽度,在32
位系统下是32
位,而在64
位系统下是64
位。 - 在
二进制传输
、读写文件的结构描述
等场景下,为了保持文件的结构不会受到不同编译目标平台字节长度的影响
,最好使用更精确的int32/int64
无符号整型
uint8
uint16
uint32
uint64
uint
示例
Go
package main
import (
"fmt"
"math"
"unsafe"
)
// 无符号整型
func UnsignedInteger() {
var uint8Val uint8 = math.MaxUint8
var uint16Val uint16 = math.MaxUint16
var uint32Val uint32 = math.MaxUint32
var uint64Val uint64 = math.MaxUint64
var uintVal uint = math.MaxUint
fmt.Printf("uint8Val的类型是 %T, uint8Val的大小 %d, int8Val的值是 %d\n", uint8Val, unsafe.Sizeof(uint8Val), uint8Val)
fmt.Printf("uint16Val的类型是 %T, uint16Val的大小 %d, int16Val的值是 %d\n", uint16Val, unsafe.Sizeof(uint16Val), uint16Val)
fmt.Printf("uint32Val的类型是 %T, uint32Val的大小 %d, int32Val的值是 %d\n", uint32Val, unsafe.Sizeof(uint32Val), uint32Val)
fmt.Printf("uint64Val的类型是 %T, uint64Val的大小 %d, int64Val的值是 %d\n", uint64Val, unsafe.Sizeof(uint64Val), uint64Val)
fmt.Printf("uintVal的类型是 %T, uintVal的大小 %d, intVal的值是 %d\n", uintVal, unsafe.Sizeof(uintVal), uintVal)
}
// 打印如下
// uint8Val的类型是 uint8, uint8Val的大小 1, int8Val的值是 255
// uint16Val的类型是 uint16, uint16Val的大小 2, int16Val的值是 65535
// uint32Val的类型是 uint32, uint32Val的大小 4, int32Val的值是 4294967295
// uint64Val的类型是 uint64, uint64Val的大小 8, int64Val的值是 18446744073709551615
// uintVal的类型是 uint, uintVal的大小 8, intVal的值是 18446744073709551615
func main() {
UnsignedInteger()
}
类型 | 取值范围 |
---|---|
int8 | [-128, 127] |
int16 | [-32768, 32767] |
int32 | [-2147483648, 2147483647] Go语言中没有字符类型,所有字符 都使用int32 存储 |
int64 | [-9223372036854775808, 9223372036854775807] |
int | 受限于计算机系统 ,系统是多少位,int 为多少位 |
uint8 | [0, 255] |
uint16 | [0, 65535] |
uint32 | [0, 4294967295] |
uint64 | [0, 18446744073709551615] |
uint | 受限于计算机系统 ,系统是多少位,uint 为多少位 |
rune | 与int32 类似,常用在获取值的Unicode 码 |
byte | 与uint8 类似,强调值为原始数据,一个字节占用8个二进制 |
uintptr | 大小不确定,类型取决于底层编程 |
浮点型
类型 | 字节数 | 说明 |
---|---|---|
float32 | 4 | 32位的浮点型 |
float64 | 8 | 64位的浮点型 |
示例
Go
package main
import (
"fmt"
"math"
"unsafe"
)
func testFloat() {
var float32Val float32 = math.MaxFloat32
var float64Val float64 = math.MaxFloat64
fmt.Printf("float32Val的类型是%T, float32Val是%g\n", float32Val, float32Val)
fmt.Printf("float32V64的类型是%T, float64Val是%g\n", float64Val, float64Val)
}
// 打印如下
// float32Val的类型是float32, float32Val是3.4028235e+38
// float32V64的类型是float64, float64Val是1.7976931348623157e+308
func main() {
testFloat()
}
字符
- 字符串中的
每一个元素
叫作字符
,定义字符时使用单引号
类型 | 字节数 | 说明 |
---|---|---|
byte | 1 | 表示UTF-8 字符串的单个字节的值 ,表示的是ASCII 码表中的一个字符 ,uint8 的别名类型 |
rune | 4 | 表示单个unicode 字符,int32 的别名类型 |
字符串
TIP
多行字符串使用反引号,在反引号
中的所有代码不会被编译器识别,而只是作为字符串
的一部分
示例
Go
var str string = "张三"
bookName := "《水浒传》"
// 多行字符串
multi_line_str := ` 时间的反馈
第一行
第二行
第三行
结束
`
fmt.Println(str, bookName)
// 张三 《水浒传》 时间的反馈
// 第一行
// 第二行
// 第三行
// 结束
- 字符串中的
转义字符
转义字符 | 含义 |
---|---|
\r | 回车符return ,返回行首 |
\n | 换行符new line , 直接跳到下一行的同列位置 |
\t | 制表符TAB |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
布尔
布尔(bool)
只有true
和false
示例
Go
package main
import (
"fmt"
)
func testBool() {
var a bool = true
b := false
fmt.Println("a=", a)
fmt.Println("b=", b)
fmt.Println("true && false = ", a && b)
fmt.Println("true || false = ", a || b)
}
// 打印如下
// a= true
// b= false
// true && false = false
// true || false = true
func main() {
testBool()
}