2.go语言基础类型漫游
本篇前瞻
本篇是go语言的基础篇,主要是帮助大家梳理一下go语言的基本类型,注意本篇有参考go圣经,如果你有完整学习的需求可以看一下,另外,go语言的基本类型比较简单,介绍过程就比较粗暴。
基本类型
整形
这个不是韩国的“绝学”——整形术,整形在编程中可以表示一定范围内的整数
注意:int或uint的占用空间取决于你的操作系统是32位或64位
对于整形我们要关注的是数据类型的长度,数据范围
代码如下:
package main
import (
"fmt"
"math"
"unsafe"
)
func main() {
fmt.Printf("int8 length: %v range: %v ~ %v\n", unsafe.Sizeof(int8(1)), math.MinInt8, math.MaxInt8)
fmt.Printf("int16 length: %v range: %v ~ %v\n", unsafe.Sizeof(int16(1)), math.MinInt16, math.MaxInt16)
fmt.Printf("int32 length: %v range: %v ~ %v\n", unsafe.Sizeof(int32(1)), math.MinInt32, math.MaxInt32)
fmt.Printf("int64 length: %v range: %v ~ %v\n", unsafe.Sizeof(int64(1)), math.MinInt64, math.MaxInt64)
fmt.Printf("int length: %v\n", unsafe.Sizeof(int(1)))
fmt.Printf("uint8 length: %v range: 0 ~ %v\n", unsafe.Sizeof(uint8(1)), math.MaxUint8)
fmt.Printf("uint16 length: %v range: 0 ~ %v\n", unsafe.Sizeof(uint16(1)), math.MaxUint16)
fmt.Printf("uint32 length: %v range: 0 ~ %v\n", unsafe.Sizeof(uint32(1)), math.MaxUint32)
fmt.Printf("uint64 length: %v range: 0 ~ %v\n", unsafe.Sizeof(uint64(1)), uint64(math.MaxUint64))
fmt.Printf("uint length: %v\n", unsafe.Sizeof(uint(1)))
}
输出:
int8 length: 1 range: -128 ~ 127
int16 length: 2 range: -32768 ~ 32767
int32 length: 4 range: -2147483648 ~ 2147483647
int64 length: 8 range: -9223372036854775808 ~ 9223372036854775807
int length: 8
uint8 length: 1 range: 0 ~ 255
uint16 length: 2 range: 0 ~ 65535
uint32 length: 4 range: 0 ~ 4294967295
uint64 length: 8 range: 0 ~ 18446744073709551615
uint length: 8
有符号整形
这种整形就是可以表示负整数,0和正整数
| 数据类型 | 占用空间(bit) | 长度(字节) | 取值范围 |
|---|---|---|---|
| int8 | 8 | 1 | -2^7 ~ 2^7-1(-128~127) |
| int16 | 16 | 2 | -2^15 ~ 2^15-1(-32768 ~ 32767) |
| int32 | 32 | 4 | -2^32 ~ 2^32-1(-2147483648 ~ 2147483647) |
| int64 | 64 | 8 | -2^64 ~ 2^64-1(-9223372036854775808 ~ 9223372036854775807) |
| int | 32或64 | 4或8 | 同int32或int64 |
无符号整形
这种整形就是可以表示非负整数
| 数据类型 | 占用空间(bit) | 长度(字节) | 取值范围 |
|---|---|---|---|
| uint8 | 8 | 1 | 0 ~ 2^8-1(0 ~ 255) |
| uint16 | 16 | 2 | 0 ~ 2^16-1(0 ~ 65535) |
| uint32 | 32 | 4 | 0 ~ 2^32-1(0 ~ 4294967295) |
| uint64 | 64 | 8 | 0 ~ 2^64-1(0 ~ 18446744073709551615) |
| uint | 32或64 | 4或8 | 同uint32或uint64 |
浮点型
浮点型在编程中可以表示一定范围内的实数
注意:对于浮点型我们要关注的是数据类型的长度,数据范围,但更要关注精度。
代码如下:
package main
import (
"fmt"
"math"
"unsafe"
)
func main() {
fmt.Printf("float32 length: %v range: %v ~ %v\n", unsafe.Sizeof(float32(1)), -math.MaxFloat32, math.MaxFloat32)
fmt.Printf("float64 length: %v range: %v ~ %v\n", unsafe.Sizeof(float64(1)), -math.MaxFloat64, math.MaxFloat64)
fmt.Printf("after transfer float32 %v\n", float32(1.328))
fmt.Printf("after transfer float64 %v\n", float64(float32(1.328)))
}
输出:
float32 length: 4 range: -3.4028234663852886e+38 ~ 3.4028234663852886e+38
float64 length: 8 range: -1.7976931348623157e+308 ~ 1.7976931348623157e+308
before transfer float32: 1.328
after transfer float64: 1.3279999494552612
你可以看到1.328在float32强制转化为float64反常地失去了一些精度,当然这就是为啥项目和数据库只有高精度实数的原因,你可以想象在这种情况时使用乘法后可怕的结果。
至于这个产生的原因时浮点32型和浮点64型在计算机上表示方式不同,这部分内容你可以查看《计算机程序的构造和解释》。
列表如下:
| 数据类型 | 占用空间(bit) | 长度(字节) | 取值范围 |
|---|---|---|---|
| float32 | 32 | 4 | -3.4028234663852886e+38 ~ 3.4028234663852886e+38 |
| float64 | 64 | 8 | -1.7976931348623157e+308 ~ 1.7976931348623157e+308 |
布尔型
最简单的类型
注意:分支语句中的if后面的表达式的结果值是true或false
代码如下:
package main
import (
"fmt"
"unsafe"
)
func main() {
fmt.Printf("bool length: %v %v/%v", unsafe.Sizeof(true), 0 == 0, 0 != 0)
}
输出:
bool length: 1 true/false
列表如下:
| 数据类型 | 占用空间(bit) | 长度(字节) | 取值范围 |
|---|---|---|---|
| bool | 1 | 1 | true/false |
字符
注意:byte是包含ascii码,即uint8 ,rune是可以包含utf-8的,即uint32**
代码如下:
package main
import (
"fmt"
"unsafe"
)
func main() {
fmt.Printf("byte length: %v %v %c\n", unsafe.Sizeof(byte('a')),byte('a'),byte('a'))
fmt.Printf("rune length: %v %v %c\n", unsafe.Sizeof(rune('中')),rune('中'),rune('中'))
}
输出:
byte length: 1 97 a
rune length: 4 20013 中
列表如下:
| 数据类型 | 占用空间(bit) | 长度(字节) | 取值范围 |
|---|---|---|---|
| byte | 8 | 1 | 0 ~ 2^8-1(0 ~ 255) |
| rune | 32 | 4 | 0 ~ 2^32-1(0 ~ 4294967295) |
本篇小结
本篇主要介绍了go语言的基本类型,每个类型都有自己的长度,取值范围和注意点,相关内容在go语言学习中,等我们学习了go语言的控制结构后来看看相关的取值范围的威力
下一篇预告
go语言的控制结构
2.go语言基础类型漫游的更多相关文章
- go 语言 基础 类型(1)
变量 使用关键字 var定义变量,自动初始化为0值.如果提供初始化值,可省略变量类型,由编译器自动推断. 在函数内部可以使用 := 方式定义变量 func main() { x := 123 } 可一 ...
- java语言基础-类型运算细节
代码一: public class varDemo{ public static void main(String[] args) { byte a2; a2=3+4; System.out.prin ...
- Swift语言指南(七)--语言基础之布尔值和类型别名
原文:Swift语言指南(七)--语言基础之布尔值和类型别名 布尔值 Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false ...
- 【C语言基础】unsigned short类型用于循环的一个难点
我在我的知识星球:“C语言解惑课堂”里的第一篇提出一个问题:[第1篇][C语言基础][unsigned short类型用于循环的一个难点]要查看更多的C语言难点解析或者需要提问的同学,微信扫扫文末我的 ...
- GO语言基础(结构+语法+类型+变量)
GO语言基础(结构+语法+类型+变量) Go语言结构 Go语言语法 Go语言类型 Go语言变量 Go 语言结构 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 &a ...
- C#语言基础——结构体和枚举类型
结构体和枚举类型 一.结构体(struct) 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- C#语言基础
第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...
- 玩转JavaScript OOP[0]——基础类型
前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的.处理一些事件的.我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统 ...
随机推荐
- 2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。
2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线.玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿.但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪 ...
- django视图中使用return redirect(reverse('')) 没有传参出现题:Reverse for ‘‘ with no arguments no arguments not
redirect 的作用是跳转 reverse的作用是反向解析 当无法反向解析的时候要确认urls.py中的path参数,name参数是否一直
- Windows server 2012 r2 激活方法
slmgr /ipk W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9 slmgr /skms kms.03k.org slmgr /ato
- 狂神说ngnix笔记
Nginx 一.什么是Nginx 二.Nginx的作用 三.Nginx的安装 1. Windows下安装 2.Linux下安装 3.Nginx目录结构 4.Nginx常用命令 5.Nginx配置文件结 ...
- Vue 打包后报 Uncaught SyntaxError: Unexpected token ‘<‘
根本原因在于你的vue.config.js里的publishPath设置的路径是相对路径还是绝对路径 大家都是看别人设置成 process.env.NODE_ENV==='production' ? ...
- asp.net WebApi JWT
文章转自 https://blog.csdn.net/liwan09/article/details/83820651 参考资料: https://docs.microsoft.com/en-us/a ...
- 使用a标签下载**.txt文件, 而不是直接打开
今天有个使用a标签下载一个 .txt 文件,但是使用了不少方法,在点击下载的时候总是会直接打开被下载的文件,但是下载其他格式的文件就不会:也在网上找了不少资料 一.尝试href + download方 ...
- django 如何提升性能(高并发)
django 如何提升性能(高并发) 对一个后端开发程序员来说,提升性能指标主要有两个一个是并发数,另一个是响应时间网站性能的优化一般包括 web 前端性能优化,应用服务器性能优化,存储服务器优化. ...
- Java实现Kafka生产者和消费者的示例
Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka的目标是为处理实时数据提供一个统一.高吞吐.低延迟的平台. 文章持续更新,微信搜索「 ...
- 柏林噪声&幻想大陆地图生成
序言 之前介绍过perlin噪声的实现,现在应用实践一下--程序化生成幻想大陆 这里使用的是perlin噪声倍频技术(也称分形噪声),详情传送门:柏林噪声算法 代码示例使用的是shadertoy的语法 ...