go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 变量的数值类型转换

go语言使用类型前置加括号的方式进行类型转换。

  • 格式

若A是一个全新的类型,需要加:;若之前已经声明过A,则不需要加:。其中,TypeOfA代表要转换的类型,B包括变量、复杂算子和函数返回值等表达式。

A [:]= TypeOfA(B)

实例

package main

import (
	"fmt"
	"math"
)

func main() {
	var x, y int = 3, 4
	// 表达式T(v)将值v转换为类型T。
	var f float64 = math.Sqrt(float64(x*x + y*y)) 
	var z int = int(f)
	fmt.Println(x, y, f, z)
}

  • 一些关于数值的类型转换
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

或者

i := 42
f := float64(i)
u := uint(f)

对不同类型之间的变量赋值时,与C不同,go需要显式转换。

注:go中不存在隐式转换,所有类型转换必须显式声明。并且,在两种相互兼容的类型之间做数值转换。


  • 数值截断

在说数据类型转换时,我们需要考虑两种类型的关系和范围,是否会发生数值截断等。

package main

import (
	"fmt"
	"math"
)

func main() {
	// 输出各数值范围
	fmt.Println("int8 range:", math.MinInt8, math.MaxInt8)
	fmt.Println("int16 range:", math.MinInt16, math.MaxInt16)
	fmt.Println("int32 range:", math.MinInt32, math.MaxInt32)
	fmt.Println("int64 range:", math.MinInt64, math.MaxInt64)

	// 初始化一个32位整型值
	var a int32 = 1047483647

	// 输出变量的十六进制形式和十进制值
	fmt.Printf("int32: 0x%x %d\n", a, a)

	// 将a变量数值转换为十六进制,从32位有符号整型转换为16位有符号整型。
	// 由于16位变量没有32位变量的数值范围大,因此数值会发生截断。
	b := int16(a)

	// 输出变量的十六进制形式和十进制值
	fmt.Printf("int16: 0x%x %d\n", b, b)

	// 将常量保存为float32类型
	// math.Pi是math包的常量,默认没有类型,会在引用到的地方自动根据实际类型进行推导
	var c float32 = math.Pi

	// 转换为int类型,浮点发生精度丢失
	// 把float32转换为int类型并输出
	fmt.Println(int(c))
}

你可能感兴趣的:(Golang,golang,开发语言,后端)