Go语言入门-类型
基本类型
基础数据类型 类型、长度、默认值、说明介绍
类型 | 长度 (单位Byte) | 默认值 | 说明 |
---|---|---|---|
bool | 1 | false | |
byte | 1 | 0 | 同uint8 |
int | 4/8 | 0 | 默认的整数类型,具体位数取决于平台,32bit的OS长度为4,64位OS长度为8 |
uint | 4/8 | 0 | 无符号整数,具体位数取决于平台,32bit的OS长度为4,64位OS长度为8 |
int8 | 1 | 0 | -128~127 |
uint8 | 1 | 0 | 0~255 |
int16 | 2 | 0 | -32768~32767 |
uint16 | 2 | 0 | 0~65535 |
int32 | 4 | 0 | -2147483648~2147483647 |
uint32 | 4 | 0 | 0~4294967295 |
int64 | 8 | 0 | -9223372036854775808~9223372036854775807 |
uint64 | 8 | 0 | 0~18446744073709551615 |
float32 | 4 | 0.0 | 1.17549e-038~3.40282e+038 |
float64 | 8 | 0.0 | 2.22507e-308~1.79769e+308 |
complex64 | 8 | ||
complex128 | 16 | ||
rune | 4 | 0 | int32的别名 存放Unicode编码 |
uintptr | 4/8 | 0 | 存放指针的类型 uint的别名 |
string | “” | 字符串 | |
array | 数组 | ||
struct | 结构体 | ||
functionnil | nil | 函数 | |
interface | nil | 接口 | |
map | nil | 字典,引用类型 | |
slice | nil | 切片,引用类型 | |
channel | nil | 通道,引用类型 |
字面值常量介绍
整型字面值常量
package main
import "fmt"
func main() {
//var dec int = 1
//var oct int = 02
//var hex int = 0x03
//var bin int = 0x0101
var (
//十进制
dec int = 127
//八进制数值需要加前缀0
oct int = 0177
//十六进制数值需要加前缀0x
hex int = 0xDF
//二进制数值常量需要加前缀0b
bin int = 0b10000011
)
fmt.Printf("dec: [十进制[%d] 八进制[%o] 十六进制[%x] 二进制[%b]\n", dec, dec, dec, dec)
fmt.Printf("oct: [十进制[%d] 八进制[%o] 十六进制[%x] 二进制[%b]\n", oct, oct, oct, oct)
fmt.Printf("hex: [十进制[%d] 八进制[%o] 十六进制[%x] 二进制[%b]\n", hex, hex, hex, hex)
fmt.Printf("bin: [十进制[%d] 八进制[%o] 十六进制[%x] 二进制[%b]\n", bin, bin, bin, bin)
}
/**
output:
dec: [十进制[127] 八进制[177] 十六进制[7f] 二进制[1111111]
oct: [十进制[127] 八进制[177] 十六进制[7f] 二进制[1111111]
hex: [十进制[223] 八进制[337] 十六进制[df] 二进制[11011111]
bin: [十进制[131] 八进制[203] 十六进制[83] 二进制[10000011]
*/
我们可以通过字面值常量来定义数字。例如在刚才的例子中,可以使用0前缀标识八进制数值如: oct int = 0177、使用0x前缀标识十六进制数值如:hex int = 0xDF, 使用0b前缀标识二进制数值,如bin int = 0b10000011。
同时fmt 包里的print函数族中Printf支持格式化打印。
其中:
%d 表示十进制占位符
%o表示八进制占位符
%x表示十六进制占位符
%b表示二进制占位符
浮点型字面值常量
func main() {
var f32a float32 = 123.334434e-3
var f32b float32 = -123.3344e-2
f32a: [十进制[ 0.123334] 十六进制[0x1.f92d88p-04] 二进制[0000000000000000000016553668p-27] 不能直接打印二进制和十六进制
fmt.Printf("f32a: [十进制[%10f] 十六进制[%08x] 二进制[%032b]\n", f32a, f32a, f32a)
//f32a: [十进制[ 0.123334] 十六进制[3dfc96c4] 二进制[00111101111111001001011011000100]
fmt.Printf("f32a: [十进制[%10f] 十六进制[%08x] 二进制[%032b]\n", f32a, math.Float32bits(f32a), math.Float32bits(f32a))
//f32b: [十进制[ -1.233344] 十六进制[bf9dde37] 二进制[10111111100111011101111000110111]
fmt.Printf("f32b: [十进制[%10f] 十六进制[%08x] 二进制[%032b]\n", f32b, math.Float32bits(f32b), math.Float32bits(f32b))
var f64c float64 = 123.334434e-3
fmt.Printf("f64c: [十进制[%10f] 十六进制[%016x] 二进制[%064b]\n", f64c, math.Float64bits(f64c), math.Float64bits(f64c))
}
/**
output:
f32a: [十进制[ 0.123334] 十六进制[0x1.f92d88p-04] 二进制[0000000000000000000016553668p-27]
f32a: [十进制[ 0.123334] 十六进制[3dfc96c4] 二进制[00111101111111001001011011000100]
f32b: [十进制[ -1.233344] 十六进制[bf9dde37] 二进制[10111111100111011101111000110111]
f64c: [十进制[ 0.123334] 十六进制[3fbf92d870802bf1] 二进制[0011111110111111100100101101100001110000100000000010101111110001]
*/
浮点数的字面值常量表示方式有两种,第一种是普通10进制+小数点标识如:123.01,第二种是科学计数法标识,如1.2301e+3/123010e-3。
同时fmt包中也支持对浮点数的格式打印,其中
使用%f表示浮点数占用符
如:
f32a: [