Go的基本数据类型

Go语言的基础数据类型


Go语言的数据类型主要分为四种:基础类型(数字,字符串,布尔类型),复合类型(数组,结构体),引用类型(指针,切片,字典,函数和通道),接口类型


整型

Go 语言的整型定义类型有符号类型主要有int8,int16,int32,int64, 无符号类型uint8,uint16,uint32,uint64. int 和uint 是对应硬件平台分别对应不同的位数。以及uintptr

类型有无符号bit数
int8yes8
int16yes16
int32yes32
int64yes64
uint8no8
uint16no16
uint32no32
uint64no64
intyes等于cpu位数
uintno等于CPU的位数
byteno等于uint8
runeyes等同于int32
uintptrno-

Go语言的Bit操作符主要有以下几种:

& 位运算 AND 
| 位运算 OR 
^ 位运算 XOR 
&^ 位清空 (AND NOT) 
<< 左移 
>> 右移

这些操作符大部分和C语言的没什么不同,在这里说一下&^这个运算符是&和^的结合

x &^ y

这里的意思就是y为1的位都为0,然后其余的和x一样。也就是先执行了^y操作然后 &x。

浮点型

  1. 浮点数表示:

Go语言定义了两个类型float32和float64,其中float32等价于C语言的float类型,
float64等价于C语言的double类型。

在这里普及一下float在内存中的存储方式

float
共计32位,折合4字节
由最高到最低位分别是第31、30、29、……、0位
31位是符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位。
22-0位,一共23位是尾数位。
float的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字。

不懂的可以参照

> http://blog.youkuaiyun.com/flowaway_/article/details/41597727

然后GO圣经的这个代码:

var f float32 = 16777216 // 1 << 24 
fmt.Println(f == f+1) // "true"!

为什么f == f+1,其实就是精度的问题,大家可以测试一下f+3和f+4的结果应该也是一样的,对于要舍弃的第一位(大于23位的第一位如果是1是要进位到前面去的)。

对于浮点型的比较因为是不精确的,所以不能使用==,可以使用下面的代码

import "math"

func Checkqual(f1, f2, p float64) bool {
return math.Fdim(f1, f2) < p
}

p是用户自定义的精度,如:0.000001


复数

复数由两部分组成,实部(real)和虚部(imag).Go 语言提供了complex64和complex128两种精度。

复数的表示:

var x complex64
x = 4 + 4i
y := 4 + 4i
z := complex(4,4)

在这里x代表是complex64类型, y,z都属于complex128类型。

对于复数,可以通过Go语言内置的real(x)和imag(x)来分别获取复数的实部和虚部。


布尔类型

布尔类型和和C语言的没什么区别关键字bool,可以赋值true 和false 。这里不做其它讲述。


字符串和Byte切片

字符串在任何语言里面都是一个很好用的东西。Go语言是直接支持原生的字符串类型。Go语言的字符串的操作感觉很像python里面的操作,看下面的字符串操作代码:

func StringFunc(s string) {
    fmt.Printf("%c", s[0]) // 下标操作和传统的C一样
    var f string = ",wenxuwan"
    s = s + f //字符串连接,可以直接+链接两个字符串
    fmt.Println(s[0:4]) //截断操作,打印0-3下表的字符串
    fmt.Println(len(s)) //打印字符串的长度

}

var str string = "Hello,world"
StringFunc(str)
对于中文字符的,如果想获取到中文字符,可以先将string转换为rune数组,得到中文的Unicode,然后用string将Unicode转换为字符即可。

常量

  • 1

常量的关键字和C语言的一样,都是const表示:

const i = 3.1415926

const同时支持批量声明

const(
    a = 10
    b
    c =20
    d 
)

批量声明除了第一个必须赋值,其它的都可以省略。你如果打印a,b,c,d的值,结果是10,10,20,20。也就保持和上面的值一样。

  • 2

这样看来其实const批量声明也没什么大的作用,因此我们需要来介绍iota(常量生成器),它和其它语言里面的enum是一样的作用

const(
    first = iota
    second
    third 
    fourth
)

输出之后,结果应该是0,1,2,3。

在这里如果代码如下

const(
    first = iota
    second
    third = 10
    fourth
)

结果会是什么?

如果是这样,结果是什么?

const(
    first = iota
    second
    third = 10
    fourth = iota
)

大家可以通过这个来自己感受iota的使用

这里还有一种使用方法

const(
    first = 1 << iota
    second
    third
    fourth
)

结果大家测试一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值