1.1 Go常量
const
package main
import (
"fmt"
"unsafe"
)
// 常量定义且赋值
const World string = "世界"
// 多常量初始化
const x,y int = 1,2
// 常量类型推断,字符串类型
const s1 = "Hello world"
// 常量组
const (
e = 2.7182818284590452353
pi = 3.14159
b bool = true
)
// 1. 常量组,可以除了第一个外其他的常量右边的初始化表达式可省略
// 2. 如果省略初始化表达式,默认使用前面常量的表达式
// 3. 遇上一个常量相同
const (
c1 =1
c2
c3
c4='c4444'
c5
)
/*
1
1
1
c4444
c4444
*/
// 常量也可以定义函数的返回值
const(
f1="abc" // 长度为3的字符串的类型
f2 = len(f1) // 返回长度的函数结果
f3 = unsafe.Sizeof(f2) // 返回f2所占用的内存大小
)
/*
输出结果:
abc
3
8
*/
func main(){
fmt.Println(f1)
fmt.Println(f2)
fmt.Println(f3)
}
1.2 Go常量之iota常量生成器
iotaconstiota
time
package main
import (
"fmt"
)
const(
Sunday = iota
Monday // 通常省略后续行表达式
Tuesday
Wednesday
Thursday
Friday
Saturday
)
func main(){
fmt.Println(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday)
}
iota
package main
import (
"fmt"
)
const (
A= iota // 初始化0
B // +1
C = "c"
D // c,与上面相同
E = iota //4 ,显式恢复。注意计数包含了C、D 两个,此时为4
F // 5 恢复iota +1
)
func main() {
fmt.Println(A, B, C, D, E, F)
}
// 输出结果
// 0 1 c c 4 5
1.3 Go 整数类型
Go语言的数值类型包含不同大小的整数类型、浮点数和负数,美中数值类型都有大小范围以及正负符号。
package main
imprort "fmt"
func mainz(){
var n1 = 100
fmt.Printf("n1的类型: %T
",n1)
}
输出结果
n1 的类型:int
1、查看变量的字节大小,和数据类型
package main
import (
"fmt"
"unsafe"
)
func main(){
var n2 int64 = 100
// unsafe 包地下的Sizeof函数, 返回变量占用字节数
fmt.Printf("n2的类型是:%T,占用的字节数是%d",n2,unsafe.Sizeof(n2))
}
输出结果
n2的类型是 int64, 占用的字节数是8
1.4 数字类型
序号 | 类型和描述 |
---|---|
1 | uint8 无符号 8 位整型 (0 到 255) |
2 | uint16 无符号 16 位整型 (0 到 65535) |
3 | uint32 无符号 32 位整型 (0 到 4294967295) |
4 | uint64 无符号 64 位整型 (0 到 18446744073709551615) |
5 | int8 有符号 8 位整型 (-128 到 127) |
6 | int16 有符号 16 位整型 (-32768 到 32767) |
7 | int32 有符号 32 位整型 (-2147483648 到 2147483647) |
8 | int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
1.5 Go浮点型
float32float64float64
1.20.005-2.32
package main
import "fmt"
func main(){
var price float32 = 100.02
fmt.Printf("price 类型是:%T,值是%v",price,price) // %T 是类型, %v 是默认值
}
float32float64
浮点数 = 符号位 + 指数位 + 位数位
package main
import "fmt"
func main(){
var price float32 = 11.22 // 正数符号
fmt.Println("price=",price)
var num1 float32 = -3.4 // 负数符号
var num2 float64 = -8.23
fmt.Println("num1=",num1,"num2=",num2)
// 尾数可能丢失,精度缺失
var num3 float32 = -123.11111111105//精度丢失了
var num4 float64 = -123.11111111105//float64的精度高于float32
fmt.Println("num3=", num3, "num4=", num4)
// 输出结果
// num3= -123.111115 num4= -123.11111111105
}
1.6 Go字符类型
字符字符(字母)byte
普通字符串就是一串固定长度的字符连接起来的字符序列
字符串字节
字符串字符
单引号
双引号
package main
import "fmt"
func main(){
var c1 byte = 'a'
var c2 byte = '2' // 字符的2
// 直接输出byte的值,也就是输出对应的字符的码值
fmt.Println("c1=",c1)
fmt.Println("c2=",c2)
// 输出字符的值,需要格式化输出
fmt.Printf("c1值%c c2值=%c
",c1,c2)
}
/*
输出结果:
c1= 97
c2= 50
c1值a c2值=2
*/
byteASCII[0-1,a-z,A-Z]
intbyteoverflows byte
var c3 int = '皮' // 正确
var c4 byte = '皮' // overflows byte 报错
Go语言默认字符编码UTF-8,统一规定
Go字符的本质是一个整数,直接打印是UTF-8编码的值
%c unicode
var c4 int = 22269
fmt.Printf("c4=%c
",c4)
// 输出的结果是c4=国
Go语言允许使用转义符号""
Unicode
1.7 Go布尔值
truefalse
iffor==<
package main
import (
"fmt"
"unsafe"
)
func main(){
var b = true
fmt.Println("b=",b)
fmt.Println("b字节数=", unsafe.Sizeof(b))
}
// 输出结果:
// b= true
// b字节数=1