Go数字类型

01.数字类型

1.1 Golang数据类型介绍

  • Go 语言中数据类型分为:基本数据类型和复合数据类型
  • 基本数据类型有:
    • 整型、浮点型、布尔型、字符串
  • 复合数据类型有:
    • 数组、切片、结构体、函数、map、通道(channel)、接口

1.2 整型分为两大类

  • 有符号整形按长度分为:int8、int16、int32、int64
  • 对应的无符号整型:uint8、uint16、uint32、uint64

img

  • 关于字节:
    • 字节也叫 Byte,是计算机数据的基本存储单位。8bit(位)=1Byte(字节) 1024Byte(字节)=1KB
    • 1024KB=1MB 1024MB=1GB
    • 1024GB=1TB 。在电脑里一个中文字是占两个字节的。

1.3 unsafe.Sizeof

  • unsafe.Sizeof(n1) 是 unsafe 包的一个函数,可以返回 n1 变量占用的字节数
package main
import (
	"fmt"
	"unsafe"
)
func main() {
	var a int8 = 124
	fmt.Printf("%T\n", a)       // int8
    fmt.Println(unsafe.Sizeof(a))      // 1 (表示占用1个字节,也就是8 byte)
}

1.4 int不同长度直接的转换

package main
import (
	"fmt"
)
func main() {
	var num1 int8
	num1 = 127
	num2 := int32(num1)   // 将num1类型转换成 int32 并赋值给num1
	fmt.Printf("值:%v 类型%T", num2, num2) //值:127 类型 int32
}

1.5 浮点型

  • Go 语言支持两种浮点型数:float32 和 float64
package main
import (
	"fmt"
	"math"
)
func main() {
	fmt.Printf("%f\n", math.Pi)    // 3.141593 (默认保留 6 位小数)
	fmt.Printf("%.2f\n", math.Pi)   // 3.14 (保留 2 位小数)
}

1.6 reflect.TypeOf查看数据类型

package main
import (
	"fmt"
	"reflect"
)

func main() {
	c := 10
	fmt.Println( reflect.TypeOf(c) )   // int
}

02.int互转

2.0 int常用转换

package main

import (
	"fmt"
	"strconv"
)

func main()  {
	// string到int
	intV,_ := strconv.Atoi("123456")
	// string到int64
	int64V, _ := strconv.ParseInt("123456", 10, 64)

	// int到string
	strS := strconv.Itoa(123)
	// int64到string
	var tmp int64 =  123
	str64S:=strconv.FormatInt(tmp,10)
	
	fmt.Printf("%T--%T--%T--%T", intV, int64V, strS, str64S)
	// int--int64--string--string
}

2.1 int8转int16

package main
import "fmt"
func main() {
	var a int8 = 20
	var b int16 = 40
	var c = int16(a) + b    //要转换成相同类型才能运行
	fmt.Printf("值:%v--类型%T", c, c)  //值:60--类型 int16
}

2.2 int16转float32

package main
import "fmt"
func main() {
	var a float32 = 3.2
	var b int16 = 6
	var c = a + float32(b)
	fmt.Printf("值:%v--类型%T", c, c)  //值:9.2--类型 float32
}

2.3 math.Sqrt强转

package main
import (
	"fmt"
	"math"
)
func main() {
	var a, b = 3, 4
	var c int
	// math.Sqrt()接收的参数是 float64 类型,需要强制转换
	c = int(math.Sqrt(float64(a*a + b*b)))
	fmt.Println(c)  // 5
}

03.int与str转换

3.1 int与str转换

package main
import (
	"fmt"
	"strconv"
)

func main() {
	//2.1 int64转str
	var num2 int64 = 123456
	str2 := strconv.FormatInt(num2, 10)
	fmt.Printf("%v---%T \n",str2,str2)  // 123456---string

	//2.2 str转int64
	v1, _ := strconv.ParseFloat(str2, 64)
	fmt.Printf("%v---%T\n",v1,v1)      // 123456---float64
}

3.2 str与int64转换

package main
import (
	"fmt"
	"strconv"
)

func main() {
	//1.1 int转sting
	num1 := 123456
	str1 := strconv.Itoa(num1)
	fmt.Printf("%v---%T \n",str1,str1)  // 123456---string

	// 1.2 sting转int
	_int, err := strconv.Atoi(str1)
	fmt.Println(_int,err)  // 123456 <nil>
	fmt.Printf("%v---%T\n",_int,_int)   // 123456---int


	//2.1 int64转str
	var num2 int64 = 123456
	str2 := strconv.FormatInt(num2, 10)
	fmt.Printf("%v---%T \n",str2,str2)  // 123456---string

	//2.2 str转int64
	v1, _ := strconv.ParseFloat(str2, 64)
	fmt.Printf("%v---%T\n",v1,v1)      // 123456---float64
}

04.布尔值

  • Go 语言中以 bool 类型进行声明布尔型数据,布尔型数据只有 true(真)和 false(假)两个值。
  • 注意:
    • 1.布尔类型变量的默认值为 false。
    • 2.Go 语言中不允许将整型强制转换为布尔型.
    • 3.布尔型无法参与数值运算,也无法与其他类型进行转换。
package main
import (
	"fmt"
	"unsafe"
)
func main() {
	var b = true
	fmt.Println(b, "占用字节:", unsafe.Sizeof(b))  // true 占用字节: 1
}
### Golang 数据类型概述 在 Go 语言中,支持多种内置的数据类型。这些数据类型分为基本类型和复合类型。 #### 基本数据类型 Go 支持以下几种基本数据类型[^3]: - **布尔类型 (`bool`)** 表示真或假的逻辑值。 - **数值类型** - 整形: - `int8`, `int16`, `int32`, `int64`: 有符号整数 - `uint8`, `uint16`, `uint32`, `uint64`: 无符号整数 - `byte`: 同义于 `uint8` - `rune`: 同义于 `int32`,用于表示 Unicode 码点 - `int`, `uint`: 平台相关的默认整型大小 - 浮点型: - `float32`, `float64` - 复杂浮点型: - `complex64`, `complex128` - **字符串 (`string`)** 字符串是一组不可变字符序列,由双引号包围。 #### 查看变量的字节大小和数据类型 为了获取变量的具体信息,在程序运行期间可以通过特定函数来实现这一点。例如,要打印出一个变量的实际占用空间以及其具体类型,可以使用如下方式[^4]: ```go package main import ( "fmt" "unsafe" ) func main() { var i int = 100 fmt.Printf("i 的类型:%T\n", i) fmt.Printf("i 占用的空间大小:%d bytes\n", unsafe.Sizeof(i)) } ``` 这段代码展示了如何利用标准库中的 `fmt` 包来进行格式化输出,并借助 `unsafe.Sizeof()` 函数计算给定表达式的存储需求。 #### 显式类型转换 值得注意的是,在 Go 中不同类型之间的赋值操作不会发生隐含的自动转型;相反地,程序员必须通过显示的方式完成这一过程。对于简单的数值类型间转化,遵循这样的模式[^5]: ```go var a uint8 = 255 var b int = int(a) // 将 uint8 转换为 int 类型 ``` 这种设计有助于减少潜在错误并提高代码的安全性和可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值