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 数字类型

序号类型和描述
1uint8 无符号 8 位整型 (0 到 255)
2uint16 无符号 16 位整型 (0 到 65535)
3uint32 无符号 32 位整型 (0 到 4294967295)
4uint64 无符号 64 位整型 (0 到 18446744073709551615)
5int8 有符号 8 位整型 (-128 到 127)
6int16 有符号 16 位整型 (-32768 到 32767)
7int32 有符号 32 位整型 (-2147483648 到 2147483647)
8int64 有符号 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