【Golang】认识Go语言中基本的数据类型

目录

整形

基本整型 

特殊整型

浮点型

布尔型

字符型

字符串转义符 

多行字符串

字符串的常用操作

复数


我们不论在学习什么语言中,我们都要去认识一下这个语言中的数据类型,当然学习Go也不例外,我们也要去认识一下其相关的数据类型,当然这些数据类型基本上是大同小异的,如果学之前一些语言的学习经验的话,在理解学习起来将会更加的迅速。

在Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。


整形

新手须知: 整型数据指的是不包含小数部分的数值型数据。整型数据只用来表示整数,以二进制形式存储。

基本整型 

Go语言中的整型分为有符号和无符号两类:

  • 按长度分有符号整型:int8、int16、int32、int64
  • 按长度分无符号整型:uint8、uint16、uint32、uint64。

uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。 

特殊整型

特殊整型在这里指的是两种一般对应特定CPU平台机器字大小的有符号和无符号整数int和uint;其中int是应用最广泛的数值类型。这两种类型都有同样的大小,32或64bit,但是我们不能对此做任何的假设;因为不同的编译器即使在相同的硬件平台上可能产生不同的大小;以及说是还有一种无符号的整数类型uintptr,没有指定具体的bit大小但是足以容纳指针。uintptr类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方

注意事项获取对象的长度的内建len()函数返回的长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用int来表示。在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int和 uint

package main

import (
	"fmt"
)

func main() {
	var a int
	var b int32
	var c uint = 10

	a = 2147483647
	b = -2147483648

	fmt.Print(a, b, c)
}

浮点型

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

这两种浮点型数据格式遵循IEEE 754标准: float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32。 float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64。 (需要注意的是:因为float32的有效bit位只有23个,其它的bit位用于指数和符号;当整数大于23bit能表达的范围时,float32的表示将出现误差)

打印浮点数的方式:这里我们使用fmt包配合动词%f

package main

import (
	"fmt"
	"math"
)

func main() {
	var a float64

	a = 5.923871

	fmt.Print(a)
	fmt.Printf("\n%f\n", math.Pi)
	fmt.Printf("%.5f\n", math.Pi)
}

布尔型

新手须知:一个布尔类型的值只有两种:true和false。if和for语句的条件部分都是布尔类型的值,并且==和<等比较操作也会产生布尔型的值。一元操作符!对应逻辑非操作,因此!true的值为false,更罗嗦的说法是(!true==false)==true,虽然表达方式不一样,不过我们一般会采用简洁的布尔表达式,就像用x来表示x==true

Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)false(假)两个值。 

布尔值可以和&&(AND)和||(OR)操作符结合,并且有短路行为:如果运算符左边值已经可以确定整个布尔表达式的值,那么运算符右边的值将不再被求值,因此下面的表达式总是安全的:

s != "" && s[0] == 'x'

注:&&的优先级比||高)

布尔值并不会隐式转换为数字值0或1,反之亦然。必须使用一个显式的if语句辅助转换:

i := 0
if b {
    i = 1
}

注意:

  1. 布尔类型变量的默认值为false
  2. Go 语言中不允许将整型强制转换为布尔型.
  3. 布尔型无法参与数值运算,也无法与其他类型进行转换。

字符型

新手须知:字符串是一个不可改变的字节序列。字符串可以包含任意的数据,包括byte值0,但是通常是用来包含人类可读的文本。文本字符串通常被解释为采用UTF8编码的Unicode码点(rune)序列

Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(")中的内容,可以在Go语言的源码中直接添加非ASCII码字符。

字符串值也可以用字符串面值方式编写,只要将一系列字节序列包含在双引号内即可:

s1 := "Hello"
s2 := "World"

字符串转义符 

Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示。

多行字符串

Go语言中要定义一个多行字符串时,就必须使用反引号字符:

s := `第一行
第二行
第三行
...
第n行
`


fmt.Println(s)

反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。

字符串的常用操作

复数

 Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。

内置的complex函数用于构建复数,内建的real和imag函数分别返回复数的实部和虚部:

var c1 complex64
c1 = 1 + 2i

var c2 complex128
c2 = 2 + 3i

var x complex128 = complex(1, 2) // 1+2i

var y complex128 = complex(3, 4) // 3+4i

fmt.Println(x*y)                 
fmt.Println(real(x*y))           
fmt.Println(imag(x*y))           
fmt.Println(c1)
fmt.Println(c2)

  • 复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。
  • 复数也可以用==和!=进行相等比较。只有两个复数的实部和虚部都相等的时候它们才是相等的,所以需要小心的处理其精度的问题
  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉云生烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值