基础数据类型
整型
有符号整型
int8int16int32int64int
示例
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
无符号整型
uint8uint16uint32uint64uint
示例
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()
}