资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

go语言17类型浮点数 go语言值类型

Go语言基础语法(一)

本文介绍一些Go语言的基础语法。

创新互联专注于企业网络营销推广、网站重做改版、南阳网站定制设计、自适应品牌网站建设、H5建站商城开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为南阳等各大城市提供网站开发制作服务。

先来看一个简单的go语言代码:

go语言的注释方法:

代码执行结果:

下面来进一步介绍go的基础语法。

go语言中格式化输出可以使用 fmt 和 log 这两个标准库,

常用方法:

示例代码:

执行结果:

更多格式化方法可以访问中的fmt包。

log包实现了简单的日志服务,也提供了一些格式化输出的方法。

执行结果:

下面来介绍一下go的数据类型

下表列出了go语言的数据类型:

int、float、bool、string、数组和struct属于值类型,这些类型的变量直接指向存在内存中的值;slice、map、chan、pointer等是引用类型,存储的是一个地址,这个地址存储最终的值。

常量是在程序编译时就确定下来的值,程序运行时无法改变。

执行结果:

执行结果:

Go 语言的运算符主要包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符以及指针相关运算符。

算术运算符:

关系运算符:

逻辑运算符:

位运算符:

赋值运算符:

指针相关运算符:

下面介绍一下go语言中的if语句和switch语句。另外还有一种控制语句叫select语句,通常与通道联用,这里不做介绍。

if语法格式如下:

if ... else :

else if:

示例代码:

语法格式:

另外,添加 fallthrough 会强制执行后面的 case 语句,不管下一条case语句是否为true。

示例代码:

执行结果:

下面介绍几种循环语句:

执行结果:

执行结果:

也可以通过标记退出循环:

--THE END--

Go语言和其他语言的不同之基本语法

Go语言作为出现比较晚的一门编程语言,在其原生支持高并发、云原生等领域的优秀表现,像目前比较流行的容器编排技术Kubernetes、容器技术Docker都是用Go语言写的,像Java等其他面向对象的语言,虽然也能做云原生相关的开发,但是支持的程度远没有Go语言高,凭借其语言特性和简单的编程方式,弥补了其他编程语言一定程度上的不足,一度成为一个热门的编程语言。

最近在学习Go语言,我之前使用过C#、Java等面向对象编程的语言,发现其中有很多的编程方式和其他语言有区别的地方,好记性不如烂笔头,总结一下,和其他语言做个对比。这里只总结差异的地方,具体的语法不做详细的介绍。

种一棵树最好的时间是十年前,其次是现在。

3)变量初始化时候可以和其他语言一样直接在变量后面加等号,等号后面为要初始化的值,也可以使用变量名:=变量值的简单方式

3)变量赋值 Go语言的变量赋值和多数语言一致,但是Go语言提供了多重赋值的功能,比如下面这个交换i、j变量的语句:

在不支持多重赋值的语言中,交换两个变量的值需要引入一个中间变量:

4)匿名变量

在使用其他语言时,有时候要获取一个值,却因为该函数返回多个值而不得不定义很多没有的变量,Go语言可以借助多重返回值和匿名变量来避免这种写法,使代码看起来更优雅。

假如GetName()函数返回3个值,分别是firstName,lastName和nickName

若指向获得nickName,则函数调用可以这样写

这种写法可以让代码更清晰,从而大幅降低沟通的复杂度和维护的难度。

1)基本常量

常量使用关键字const 定义,可以限定常量类型,但不是必须的,如果没有定义常量的类型,是无类型常量

2)预定义常量

Go语言预定义了这些常量 true、false和iota

iota比较特殊,可以被任务是一个可被编译器修改的常量,在每个const关键字出现时被重置为0,然后在下一个const出现之前每出现一个iota,其所代表的数字会自动加1.

3)枚举

1)int 和int32在Go语言中被认为是两种不同类型的类型

2)Go语言定义了两个浮点型float32和float64,其中前者等价于C语言的float类型,后者等价于C语言的double类型

3)go语言支持复数类型

复数实际上是由两个实数(在计算机中使用浮点数表示)构成,一个表示实部(real)、一个表示虚部(imag)。也就是数学上的那个复数

复数的表示

实部与虚部

对于一个复数z=complex(x,y),就可以通过Go语言内置函数real(z)获得该复数的实部,也就是x,通过imag(z)获得该复数的虚部,也就是y

4)数组(值类型,长度在定义后无法再次修改,每次传递都将产生一个副本。)

5)数组切片(slice)

数组切片(slice)弥补了数组的不足,其数据结构可以抽象为以下三个变量:

6)Map 在go语言中Map不需要引入任何库,使用很方便

Go循环语句只支持for关键字,不支持while和do-while

goto语句的语义非常简单,就是跳转到本函数内的某个标签

今天就介绍到这里,以后我会在总结Go语言在其他方面比如并发编程、面向对象、网络编程等方面的不同及使用方法。希望对大家有所帮助。

go使用decimal

在公司项目中看到关于钱的数据在接口展示、添加修改的各种情况下结构体中相应字段用的都是string类型。觉得不太合理,因此查阅了一些资料,整理如下。

在网上搜到一篇博客:

在程序计算中涉及到钱的时候,为什么要用Decimal而不是Float

博客中介绍,如果用float类型再转为decimal类型时会造成精度丢失。转为string后再转为decimal则可以解决问题,保证精度。看着好像是很完美的回答了我想要了解的问题,但仔细一看用的语言是python,于是我便亲自试了下:

结果确实如此,但看版本是2.7,我怀疑是不是python2.7版本落后,因此存在问题,于是又换了python3,再次测试:

结论依然是一样。好吧,证实了,对于python确实应该先转为string再转为decimal。

但是,python是这样,难道go也是这样吗,于是我又开始了进一步测试:

go中decimal使用第三方库

这里是直接用float64转为decimal,并没有通过string中转,结果输出如下:

乍一看,看着好像是精度丢失了似的,但是对比后我们发现,float64和decimal前后都是一致的,也就是说float64转为decimal之后,保持了原样。那些看起来小数点后位数很多的结果,是因为float64浮点类型计算产生的问题,跟转换并没有关系。

为了验证这一结论,我又写了下面的测试:

不使用浮点类型相加,而用decimal类型相加,这样输出结果果然没问题了:

因此我们可以得出结论:对于go语言,在把float转换为decimal类型时,并不需要像python一样通过string中转,也依然可以保持精度。进一步,我们也可以想到上面的问题,对于钱,在结构体字段中,我们完全可以直接使用float类型,并不需要用string类型。而且好处时,使用float数值类型,无论对于前端还是后端,在进行数值范围验证的时候,会更方便,不必把string转为float后再验证了。

上面提到了decimal包,我们这里简单看下,里面的常用的方法:

定义decimal的几种方式:

decimal数值运算

比较:

我们再看下浮点精度运算不准确的原因,这篇文章讲解的比较细

浮点精度(float、double)运算不精确的原因

精度运算不准确这是为什么呢?我们接下来就需要从计算机所有数据的表现形式二进制说起了。如果大家很了解二进制与十进制的相互转换,那么就能轻易的知道精度运算不准确的问题原因是什么了。

接下来我们看一个简单的例子 2.1 这个十进制数转成二进制是什么样子的。

落入无限循环结果为 10.0001100110011........ , 我们的计算机在存储小数时肯定是有长度限制的,所以会进行截取部分小数进行存储,从而导致计算机存储的数值只能是个大概的值,而不是精确的值。从这里看出来我们的计算机根本就无法使用二进制来精确的表示 2.1 这个十进制数字的值,连表示都无法精确表示出来,计算肯定是会出现问题的。

1、为什么数值表示用decimal 不用double

2、在程序计算中涉及到钱的时候,为什么要用Decimal而不是Float

3、MySQL数据类型DECIMAL用法

4、浮点精度(float、double)运算不精确的原因

Go number

Go中数值类型可细分为整数、浮点数、复数三种,每种都具有不同的大小范围和正负支持。

整型分为两大类

Go提供了有符号和无符号的整数类型,同时提供四种大小不同的整数类型。

取值范围

等价类型

特殊整型

int 和 uint 分别对应特定CPU平台的字长(机器字大小),大小范围在 32bit 或 64bit 之间变化,实际开发中由于编译器和硬件不同而不同。

进制转换

转换函数

使用注意

字节长度

Golang提供了两种精度的浮点数分别为 float32 和 float64 ,它们的算术规范由IEEE754浮点数国际标准定义,IEEE754浮点数标准被现代CPU支持。

float32 类型的浮点数可提供约6个十进制数的精度, float64 类型的浮点数可提供约15个十进制数的精度。通常会优先选择使用 float64 ,因为 float32 累计计算误差会比较容易扩散。

计算机中复数(complex)由两个浮点数表示,一个表示实部(real)一个表示虚部(imag)。

Go语言中复数的值由三部分组成 RE + IMi ,分别是实数部分 RE 、虚数部分 IM 、虚数单位 i , RE 和 IM 均为 float 。

Go语言提供两种类型的复数,分别是 complex64 即32位实数和虚数, complex128 即64位实数和虚数, complex128 为复数的默认类型。

复数声明

z 表示复数的变量名, complex128 表示复数类型, complex() 内置函数用于为复数赋值。 x 和 y 分别表示构成该复数的两个 float64 类型的值, x 为实部, y 为虚部。

简写形式

对于 z 值可通过内置函数 real(z) 获取该复数的实部,使用 imag(z) 获取虚部。


标题名称:go语言17类型浮点数 go语言值类型
浏览地址:http://cdkjz.cn/article/ddedgsd.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220