Skip to content
On this page

基础数据类型

整型

有符号整型

  • 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为多少位
runeint32类似,常用在获取值的Unicode
byteuint8类似,强调值为原始数据,一个字节占用8个二进制
uintptr大小不确定,类型取决于底层编程

浮点型

类型字节数说明
float32432位的浮点型
float64864位的浮点型

示例

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()
}

字符

  • 字符串中的每一个元素叫作字符,定义字符时使用单引号
类型字节数说明
byte1表示UTF-8字符串的单个字节的值,表示的是ASCII码表中的一个字符uint8的别名类型
rune4表示单个unicode字符,int32的别名类型

字符串

TIP

多行字符串使用反引号,在反引号中的所有代码不会被编译器识别,而只是作为字符串的一部分

示例

Go
var str string = "张三"
bookName := "《水浒传》"
// 多行字符串
multi_line_str := ` 时间的反馈
  第一行
     第二行
        第三行
  结束
`
fmt.Println(str, bookName)
// 张三 《水浒传》  时间的反馈
//                 第一行
//                    第二行
//                       第三行
//                 结束
  • 字符串中的转义字符
转义字符含义
\r回车符return,返回行首
\n换行符new line, 直接跳到下一行的同列位置
\t制表符TAB
\'单引号
\"双引号
\\反斜杠

布尔

布尔(bool)只有truefalse

示例

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()
}