基本数据类型

Go语言是一种静态类型的编程语言, 在Go编程语言中, 数据类型用于声明函数和变量. 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存, 就可以充分利用内存, 编译器在进行编译的时候, 就要知道每个值的类型, 这样编译器就知道要为这个值分配多少内存, 并且知道这段内存表示什么

1.布尔型

布尔型的值只可以是常量true或者false, 一个简单的例子: var b bool = true

func main(){
    var b1 bool
    var b2 bool
    
    b1 = true
    b2 = false
    
    fmt.Printf("@T,@t\n",b1,b2)
    fmt.Printf("%T,%t\n",b2,b2)
}

2.数值型

整型int和浮点型float32, float64, Go语言支持整型和浮点型数字, 并且支持复数, 其中位的预算采用补码

Go也有基于架构的类型, 例如: uint无符号, int有符号

序号类型描述
1uint8无符号8位整型(0到255)
2uint16无符号16位整型(0到65535)
3uint32无符号32位整型
4uint64无符号64位整型
5int8有符号8位整型
6int16有符号16位整型
7int32有符号32位整型
8int64有符号64位整型

浮点型

序号类型描述
1float32IEEE-754 32为浮点型数
2float64IEEE-754 64位浮点型数
3complex6432位实数和虚数
4complex12864位实数和虚数
  1. 关于浮点数在机器中存放形式的简单说明, 浮点数 = 符号位 + 指数位 + 尾数位
  2. 尾数部分可能丢失, 造成精度损失.

说明:

  • float64的精度要比float32的要准确
  • 如果我们要保存一个精度高的数, 则应该选择float64
  1. golang的浮点型默认为float64类型
  2. 通常情况下, 应该使用float64, 因为它比float32更准确

以下列出了其他更多的数字类型

序号类型和描述
1byte类似uint8
2rune类似int32
3uint32或64位
4int与uint一样大小
5uintptr无符号整形, 用于存放一个指针

3.字符串型

package main

import "fmt"

func main() {

	var str string
	str = "Hello, zjzaki"

	fmt.Printf("%T, %s\n", str, str)

	//单引号
	v1 := 'A'
	v2 := "A"
	// 编码表 ASCII字符码
	// 中国字编码: GBK
	// 全世界编码表: Unicode编码表
	fmt.Printf("%T, %s\n", v1, v1)
	fmt.Printf("%T, %s\n", v2, v2)

	// 字符串连接
	fmt.Println("Hello" + " Zjzaki")

	//转义字符 \
	fmt.Printf("hello\"zjzaki")
}

4.数据类型转换

在必要以及可行的情况下, 一个类型的值可以转换成另一种类型的值. 由于Go语言不存在隐式类型转换, 因此所有的转换类型都必须显式的声明:

valueOfTypeB = typeB(valueOfTypeA)

类型B的值 = 类型B(类型A的值)

package main

import "fmt"

func main() {

	a := 3 //int
	b := 5.0
	// 将int类型的a转换成float64 类型转换
	c := float64(a)
	d := int(b)
	//报错
	e := bool(a)

	fmt.Printf("%T\n", a)
	fmt.Printf("%T\n", b)
	fmt.Printf("%T\n", c)
	fmt.Printf("%T\n", d)

}

类型转换只能正确的情况下转换成功, 例如从一个取值范围较小的类型转换到一个取值范围较大的类型(将int16转换为int32). 当从一个取值范围较大的类型转换到取值范围较小的类型时(将int32转换为int16或将float32转换为int), 会发生进度丢失(截断)的情况.