You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

4.1 KiB

数据类型

Go语言中常见的数据类型有很多,例如:

  • 整型,用于表示整数。
  • 浮点型,用于表示小数。
  • 布尔型,用于表示真/假。
  • 字符串,用于表示文本信息。
  • 数组,用于表示多个数据(数据集合)
  • 指针,用于表示内存地址的类型。
  • 切片,用于表示多个数据(数据集合)
  • 字典,用于表示键值对结合。
  • 结构体,用于自定义一些数据集合。
  • 接口,用于约束和泛指数据类型。

整型

Go中的整型分为有符号和无符号两大类,有符号的包含负值,无符号不包含负值。

有符号整型:

  • int8(-128 -> 127)
  • int16(-32768 -> 32767)
  • int32(-2,147,483,648 -> 2,147,483,647)
  • int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
  • int
    • 在 32 位操作系统上使用 32 位(-2,147,483,648 -> 2,147,483,647) 2**32
    • 在 64 位操作系统上使用 64 位(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,80)2**64

无符号整数:

  • uint8(0 -> 255)
  • uint16(0 -> 65,535)
  • uint32(0 -> 4,294,967,295)
  • uint64(0 -> 18,446,744,073,709,551,615)
  • uint
    • 在 32 位操作系统上使用32 位(0 -> 4,294,967,295) 2**32
    • 64 位操作系统上使用 64 位(0 -> 18,446,744,073,709,551,615) 2**64

不同整型可表示的数据范围不同,我们需要根据自己的需求来选择适合的类型。

整型转换

data := intxxx(其他整型)

var v1 int8 = 10
var v2 int16 = 18
v3 := int16(v1) + v2
fmt.Println(v3, reflect.TypeOf(v3))

注意:

  • 地位转向高位,没问题。
  • 高位转向低位,可能有问题

现象:轮回=>不会报错

var v1 int16 = 130
v2 := int8(v1)
fmt.Println(v2)
输出结果为 -126

其他进制转换

math下的数学运算模块

指针/nil/声明变量/new

  • 声明变量
  • 指针
  • new 关键字
  • nil 空值

为什么要有指针?

为了节省内存,不重复开辟空间区存储

int和*int是两种不同的数据类型

超大整型

使用指针的方式,即:使用new来进行创建和初始化。

// 第一步:创建一个超大整型的一个对象
var v1 big.Int
var v2 big.Int

// 第二步:在超大整型对象中写入值
v1.SetInt64(9223372036854775807)
fmt.Println(v1)

v2.SetString("92233720368547758089223372036854775808", 10)
fmt.Println(v2)
// 第一步:创建一个超大整型的一个对象
v3 := new(big.Int)
v4 := new(big.Int)

// 第二步:在超大整型对象中写入值
v3.SetInt64(9223372036854775807)
fmt.Println(v3)

v4.SetString("92233720368547758089223372036854775808", 10)
fmt.Println(v4)

超大整形的运算

也是建议使用new的方式

浮点型

float类型,计算机中小数的非精确的表示方式,如:3.14

float底层存储原理

  1. 浮点型转换为二进制
  2. 科学计数法表示
  3. 存储

decimal

第三方的包

package main

import (
	"fmt"
	"github.com/shopspring/decimal"
)

func main() {

	var v1 = decimal.NewFromFloat(0.0000000000019)
	var v2 = decimal.NewFromFloat(0.29)

	var v3 = v1.Add(v2)

	var v4 = v1.Sub(v2)

	var v5 = v1.Mul(v2)

	var v6 = v1.Div(v2)
	
    fmt.Println(v3, v4, v5, v6) // 输出:0.2900000000019(也可以调用String方法)
    
    
	var price = decimal.NewFromFloat(3.4626)
	var data1 = price.Round(1) 		// 保留小数点后1位(四舍五入)
	var data2 = price.Truncate(1)	// 保留小数点后1位
	fmt.Println(data1, data2) // 输出:3.5  3.4
}

布尔类型

阿巴阿巴

字符串

阿巴阿巴

底层存储逻辑

计算机中所有的操作和数据最终都是二进制,即:1000100001011...

Go语言中的字符串是utf-8编码的序列。

数组

数组,定长且元素类型一致的数据集合。

  • 数组的内存是连续的。
  • 数组的内存地址实际上就是数组第一个元素的内存地址。
  • 每个字符串的内部存储:len + str

可变和拷贝

可变,数组的元素可以被更改(长度和类型都不可以修改)。

注意:字符串不可以被修改。

拷贝,变量赋值时重新拷贝一份。