golang 数值类型

156 阅读3分钟

1、golang 数据类型

golang数据类型.webp 数据类型:

  • 布尔类型,只有常量 true 或者 false
  • 数字类型,包括几种不同大小的整数、浮点数和复数,
  • 字符串类型,字符串就是一串固定长度的字符连接起来的字符序列。一个字符串是一个不可改变的字节序列。Go语言的字符串是由单个字节连接起来的。Go语言的字符串的字节使用 UTF-8 编码标识 unicode 文本
  • 派生类型 :
    1. 指针类型(Pointer)
    2. 数组类型
    3. 结构化类型(struct)
    4. Channel 类型
    5. 函数类型
    6. 切片类型
    7. 接口类型(interface)
    8. Map 类型

2、整型

Go语言同时提供了有符号和无符号类型的整数运算 int8,uint8,int16,uint16,int64,uint64

不管它们的具体大小,int、uint和uintptr是不同类型的兄弟类型。其中int和int32也是不同的类型,即使int的大小也是32bit,在需要将int当作int32类型的地方需要一个显式的类型转换操作

2.1、byte

byte也是uint8类型的等价类型,byte类型一般用于强调数值是一个原始的数据而不是一个小的整数

func main() {
	s := "abc"
	b := []byte(s)
	s1 := string(b)

	fmt.Printf("b: %v\n", b)
	fmt.Printf("s1: %v\n", s1)
}

2.2、int 和 uint

是两种一般对应特定CPU平台机器字大小的有符号和无符号整数int和uint;其中int是应用最广泛的数值类型. 当是32位操作系统对应的是4位(int32)。当是64位操作系统对应的是8位(int64)

package main

import (
	"fmt"
	"math"
	"unsafe"
)

func main() {

	var a int
	fmt.Printf("a 默认值: %v\n", a)

	//int8
	var i uint8 = 1

	fmt.Printf("sizeof  : %v\n", unsafe.Sizeof(i))
	fmt.Printf("max value  : %v\n", math.MaxUint8)

	//int
	var n int = 10
	fmt.Printf("int max val: %v\n", math.MaxInt)
	fmt.Printf("int sizeof  : %v\n", unsafe.Sizeof(n)) //64位操作系统

	//自动类型推导的类型:int
	b := 2
	fmt.Printf("b: %T\n", b)

	//显示的类型转换
	c := int64(b)
	fmt.Printf("c: %T\n", c)

}
    
// a 默认值: 0
// sizeof  : 1
// max value  : 255
// int max val: 9223372036854775807
// int sizeof  : 8
// b: int
// c: int64

2.3、rune

Unicode字符rune类型是和int32等价的类型,通常用于表示一个Unicode码点。这两个名称可以互换使用

func main() {

	var s = "hello世界"
	fmt.Printf("s 的长度: %v\n", len(s))
	fmt.Printf("s 的 rune长度: %v\n", len([]rune(s)))

	s1 := []rune(s)
	fmt.Println(string(s[5:7]))
	fmt.Println(string(s1[5:7]))

}

2.4、uintptr

是一种无符号的整数类型uintptr,没有指定具体的bit大小但是足以容纳指针。 uintptr类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方

3、浮点类型

Go语言提供了两种精度的浮点数,float32和float64。它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持。

这些浮点数类型的取值范围可以从很微小到很巨大。浮点数的范围极限值可以在math包找到。常量math.MaxFloat32表示float32能表示的最大数值,大约是 3.4e38;对应的math.MaxFloat64常量大约是1.8e308。它们分别能表示的最小值近似为1.4e-45和4.9e-324

//自动推到的类型: float64
d := 1.2
fmt.Printf("d type: %T\n", d)
//d type: float64
fmt.Printf("d max: %v\n", math.MaxFloat64)
//d max: 1.7976931348623157e+308

var e float32
fmt.Printf("e 默认值: %v\n", e)
//e 默认值: 0
        

4、运算符

算术运算、逻辑运算和比较运算的二元运算符,它们按照优先级递减的顺序排列

*      /      %      <<       >>     &       &^
+      -      |      ^
==     !=     <      <=       >      >=
&&
||
&      位运算 AND
|      位运算 OR
^      位运算 XOR
&^     位清空(AND NOT)
<<     左移
>>     右移

在Go语言中,%取模运算符的符号和被取模数的符号总是一致的,因此-5%3-5%-3结果都是-2。除法运算符/的行为则依赖于操作数是否全为整数,比如5.0/4.0的结果是1.25,但是5/4的结果是1,因为整数除法会向着0方向截断余数

golang的两个整数相除:

func main() {

	n := 2 / 10

	fmt.Printf("n: %v\n", n)
        // n = 0
        
        n1 := 2.0 /10
        //n1=0.2
}