• 技术文章 >后端开发 >Golang

    Go中数值类型有几种

    青灯夜游青灯夜游2023-01-09 11:08:11原创54

    Go中数值类型有3种:1、整数类型,可分为平台无关整型及平台相关整型,区别是在不同CPU架构或操作系统下长度是否是一致的。2、浮点类型,可分为float32与float64两种,分别对应IEEE754中的单精度与双精度浮点数值类型。3、复数,可分为complex128(64位实数和虚数)和 complex64(32位实数和虚数)两种,其中complex128为复数的默认类型。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    Go语言体系中的基本数据类型总来的来说包括数值类型与字符串类型。

    而数值类型又可分为以下几种:整数、浮点数、复数,其中每一种都包含了不同大小的数值类型,例如有符号整数包含 int8、int16、int32、int64 等,每种数值类型都决定了对应的大小范围和是否支持正负符号。

    Go语言整型(整数类型)

    在Go语言中整型分为平台无关整型及平台相关整型,区别主要就在,这些整数类型在不同CPU 架构或操作系统下面,它们的长度是否是一致的。

    平台无关整型

    而无关整型又区分了有符号整型和无符号整型,其表示的数据范围是不一样的。

    1.png

    平台相关整型

    Go原生提供了三个平台相关整型,分别是int、uint 与 uintptr。

    2.png

    特别注意:在编写有移植性要求的代码时,千万不要强依赖这些类型的长度。

    可以通过 unsafe 包提供的 SizeOf 函数来获取三个整型在平台上的长度。

    func main() {
    	var a, b = int(5), uint(6)
    	var p uintptr = 0x12345678
    	fmt.Println("signed integer a's length is", unsafe.Sizeof(a))
    	fmt.Println("unsigned integer b's length is", unsafe.Sizeof(b))
    	fmt.Println("uintptr's length is", unsafe.Sizeof(p))
    }
    
    // 打印输出
    signed integer a's length is 8
    unsigned integer b's length is 8
    uintptr's length is 8
    格式化输出

    go提供了标准库fmt包可以格式化输出不同进制的形式。

    func main() {
    	var a int8 = 66
    	fmt.Printf("%b\n", a) //输出二进制:1000010
    	fmt.Printf("%d\n", a) //输出十进制:66
    	fmt.Printf("%o\n", a) //输出八进制:102
    	fmt.Printf("%O\n", a) //输出八进制(带0o前缀):0o102
    	fmt.Printf("%x\n", a) //输出十六进制(小写):42
    	fmt.Printf("%X\n", a) //输出十六进制(大写):42
    }

    Go语言浮点类型(小数类型)

    Go语言提供了float32与float64 两种浮点类型,它们分别对应的就是IEEE754中的单精度与双精度浮点数值类型, 这基本上对应于Java中的float和double类型。

    Go语言对浮点类型的表示提供了两种方式, 十进制类型及科学计数法; 而其中科学计数法又分为十进制和十六进制两种表示方法。

    十进制表示法

    3.1415
    .15  // 整数部分如果为0,整数部分可以省略不写
    81.80
    82. // 小数部分如果为0,小数点后的0可以省略不写

    科学计数法

    十进制表示法:
    
    6674.28e-2 // 6674.28 * 10^(-2) = 66.742800
    .12345E+5  // 0.12345 * 10^5 = 12345.000000
    
    十六进制表示法:
    
    0x2.p10  // 2.0 * 2^10 = 2048.000000
    0x1.Fp+0 // 1.9375 * 2^0 = 1.937500

    格式化输出

    var f float64 = 112.676899
    	// 浮点类型第一种:十进制表示法
    	fmt.Printf("%f\n", f) // 112.676899
    	// 浮点类型第二种:科学计数法--十进制表示法
    	fmt.Printf("%e\n", f) // 1.126769e+02
    	// 浮点类型第二种:科学计数法--十六进制表示法
    	fmt.Printf("%x\n", f) // 0x1.c2b52502eec7dp+06

    Go语言复数

    Go 提供两种复数类型,它们分别是 complex64 和 complex128,complex64 的实部与虚部都是 float32 类型,而 complex128 的实部与虚部都是 float64 类型。如果一个复数没有显示赋予类型,那么它的默认类型为 complex128。

    Go提供了三种表示方法:

    1、使用复数字面值直接初始化一个复数类型变量

    var c = 5 + 7i
    var d = 0o123 + .12345E+5i // 83+12345i

    2、使用Go提供的complex函数,创建一个complex128类型值

    var c = complex(5, 6) // 5 + 6i
    var d = complex(0o123, .12345E+5) // 83+12345i

    3、使用Go提供的预定义的函数real和imag,可以获取一个复数的实部与虚部,返回值为一个浮点类型

    var c = complex(5, 6) // 5 + 6i
    r := real(c) // 5.000000
    i := imag(c) // 6.000000

    扩展知识:自定义数值类型

    可以通过Go语言提供的type关键字基于原生数值类型来声明一个新类型。

    比如,

    type NewInt int32

    NewInt是我们新定义的类型,底层是int32类型,但是和原生类型int32却是两种类型,无法直接进行赋值,需要进行显示转换才可以。

    type NewInt int32
    
    	var m int = 5
    	var n int32 = 6
    	var a NewInt = NewInt(m) // ok
    	var b NewInt = NewInt(n) // ok

    当然如果想要能够直接与原生类型直接赋值使用,Go提供了类型别名(Type Alias)语法来自定义数值类型。

    type NewInt = int32
    
    	var m int32 = 5
    	var n NewInt = m

    总结

    Go 的原生数值类型有三类:整型、浮点型和复数型, 通过上面的简单介绍我们可以知道Go与大多数主流语言基本查不多,当然Go也有不一样的, 比如其原生支持复数类型。

    【相关推荐:Go视频教程编程教学

    以上就是Go中数值类型有几种的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Go语言中匿名变量是什么 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • go语言中怎么注释多行• go语言支不支持安卓开发• go语言能开发服务器端吗• golang是免费的吗• go语言只能开发服务端吗• golang是否有抽象类
    1/1

    PHP中文网