2.4.数据的基础类型
2.4.1 分类
Go语言内置以下这些基础类型:
类型 | 名称 | 长度 | 零值 | 说明 |
---|---|---|---|---|
bool | 布尔类型 | 1 | false | 其值不为真即为假,不可以用数字代表true或false |
byte | 字节型 | 1 | 0 | uint8 别名 |
rune | 字符类型 | 4 | 0 | 专用于存储unicode编码,等价于uint32 |
int, uint | 整型 | 4或8 | 0 | 32位或64位 |
int8, uint8 | 整型 | 1 | 0 | -128 ~ 127, 0 ~ 255 |
int16, uint16 | 整型 | 2 | 0 | -32768 ~ 32767, 0 ~ 65535 |
int32, uint32 | 整型 | 4 | 0 | -21亿 ~ 21 亿, 0 ~ 42 亿 |
int64, uint64 | 整型 | 8 | 0 | |
float32 | 浮点型 | 4 | 0.0 | 小数位精确到7位 |
float64 | 浮点型 | 8 | 0.0 | 小数位精确到15位 |
complex64 | 复数类型 | 8 | ||
complex128 | 复数类型 | 16 | ||
uintptr | 整型 | 4或8 | ⾜以存储指针的uint32或uint64整数 | |
string | 字符串 | “” | utf-8字符串 |
2.4.2 布尔类型
var v1 boolv1 = truev2 := (1 == 2) // v2也会被推导为bool类型//布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换var b boolb = 1 // err, 编译错误b = bool(1) // err, 编译错误
2.4.3整型
var v1 int32 //v1为整型v1 = 123 //设置数据为123v2 := 64 // v1将会被自动推导为int类型
2.4.4 浮点型
var f1 float32var f2 float32f1 = 12f2 := 12.0 // 如果不加小数点, fvalue2会被推导为整型而不是浮点型,float64
2.4.5字符类型
在Go语言中支持两个字符类型,一个是byte(实际上是uint8的别名),代表utf-8字符串的单个字节的值;另一个是rune,代表单个unicode字符。
package mainimport \"fmt\"func main() {var ch1, ch2, ch3 bytech1 = \'a\' //字符赋值ch2 = 97 //字符的ascii码赋值ch3 = \'\\n\' //转义字符fmt.Printf(\"ch1 = %c, ch2 = %c,%c\", ch1, ch2, ch3)//ch1 = a, ch2 = a, a}
2.4.6字符串
在Go语言中,字符串也是一种基本类型:
var str string // 声明一个字符串变量str = \"abc\" // 字符串赋值ch := str[0] // 取字符串的第一个字符fmt.Printf(\"str = %s, len = %d\\n\", str, len(str)) //内置的函数len()来取字符串的长度fmt.Printf(\"str[0] = %c, ch = %c\\n\", str[0], ch)//`(反引号)括起的字符串为Raw字符串,即字符串在代码中的形式就是打印时的形式,它没有字符转义,换行也将原样输出。str2 := `hellomike \\n \\r测试`fmt.Println(\"str2 = \", str2)/*str2 = hellomike \\n \\r测试*/
2.4.7 复数类型
复数实际上由两个实数(在计算机中用浮点数表示)构成,一个表示实部(real),一个表示虚部(image)。
var v1 complex64 // 由2个float32构成的复数类型v1 = 3.2 + 12iv2 := 3.2 + 12i // v2是complex128类型v3 := complex(3.2, 12) // v3结果同v2fmt.Println(v1, v2, v3)//内置函数real(v1)获得该复数的实部//通过imag(v1)获得该复数的虚部fmt.Println(real(v1), imag(v1))
2.5 fmt包的格式化输出输入
2.5.1 格式说明
*格式* | *含义* |
---|---|
%% | 一个%字面量 |
%b | 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 |
%c | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%d | 一个十进制数值(基数为10) |
%e | 以科学记数法e表示的浮点数或者复数值 |
%E | 以科学记数法E表示的浮点数或者复数值 |
%f | 以标准记数法表示的浮点数或者复数值 |
%g | 以%e或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 |
%G | 以%E或者%f表示的浮点数或者复数,任何一个都以最为紧凑的方式输出 |
%o | 一个以八进制表示的数字(基数为8) |
%p | 以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示 |
%q | 使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字 |
%s | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以’\\0‘结尾,这个’\\0’即空字符) |
%t | 以true或者false输出的布尔值 |
%T | 使用Go语法输出的值的类型 |
%U | 一个用Unicode表示法表示的整型码点,默认值为4个数字字符 |
%v | 使用默认格式输出的内置或者自定义类型的值,或者是使用其类型的String()方式输出的自定义值,如果该方法存在的话 |
%x | 以十六进制表示的整型值(基数为十六),数字a-f使用小写表示 |
%X | 以十六进制表示的整型值(基数为十六),数字A-F使用小写表示 |
2.5.2输出
//整型a := 15fmt.Printf(\"a = %b\\n\", a) //a = 1111fmt.Printf(\"%%\\n\") //只输出一个%//字符ch := \'a\'fmt.Printf(\"ch = %c, %c\\n\", ch, 97) //a, a//浮点型f := 3.14fmt.Printf(\"f = %f, %g\\n\", f, f) //f = 3.140000, 3.14fmt.Printf(\"f type = %T\\n\", f) //f type = float64//复数类型v := complex(3.2, 12)fmt.Printf(\"v = %f, %g\\n\", v, v) //v = (3.200000+12.000000i), (3.2+12i)fmt.Printf(\"v type = %T\\n\", v) //v type = complex128//布尔类型fmt.Printf(\"%t, %t\\n\", true, false) //true, false//字符串str := \"hello go\"fmt.Printf(\"str = %s\\n\", str) //str = hello go
2.5.3 输入
var v intfmt.Println(\"请输入一个整型:\")fmt.Scanf(\"%d\", &v)//fmt.Scan(&v)fmt.Println(\"v = \", v)
2.6类型转换
var ch byte = 97//var a int = ch //err, cannot use ch (type byte) as type int in assignmentvar a int = int(ch)
2.7类型别名
type bigint int64 //int64类型改名为bigintvar x bigint = 100type (myint int //int改名为myintmystr string //string改名为mystr)