GO语言基础数据类型

wenxuwan · · 1072 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# Go语言的基础数据类型 # *** Go语言的数据类型主要分为四种:基础类型(数字,字符串,布尔类型),复合类型(数组,结构体),引用类型(指针,切片,字典,函数和通道),接口类型</font> *** ##整型 Go 语言的整型定义类型有符号类型主要有**int8,int16,int32,int64**, 无符号类型**uint8,uint16,uint32,uint64. int 和uint 是对应硬件平台分别对应不同的位数。以及uintptr** <table class="table table-bordered table-striped table-condensed"> <tr> <td>类型</td> <td>有无符号</td> <td>bit数</td> </tr> <tr> <td>int8</td> <td>yes</td> <td>8</td> </tr> <tr> <td>int16</td> <td>yes</td> <td>16</td> </tr> <tr> <td>int32</td> <td>yes</td> <td>32</td> </tr> <tr> <td>int64</td> <td>yes</td> <td>64</td> </tr> <tr> <td>uint8</td> <td>no</td> <td>8</td> </tr> <tr> <td>uint16</td> <td>no</td> <td>16</td> </tr> <tr> <td>uint32</td> <td>no</td> <td>32</td> </tr> <tr> <td>uint64</td> <td>no</td> <td>64</td> </tr> <tr> <td>int</td> <td>yes</td> <td>等于cpu位数</td> </tr> <tr> <td>uint</td> <td>no</td> <td>等于CPU的位数</td> </tr> <tr> <td>byte</td> <td>no</td> <td>等于uint8</td> </tr> <tr> <td>rune</td> <td>yes</td> <td>等同于int32</td> </tr> <tr> <td>uintptr</td> <td>no</td> <td>-</td> </tr> </table> 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.csdn.net/flowaway_/article/details/41597727](http://blog.csdn.net/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 ) 结果大家测试一下。

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1072 次点击  ∙  1 赞  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传