本篇前瞻

本篇是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语言基础类型漫游的更多相关文章

  1. go 语言 基础 类型(1)

    变量 使用关键字 var定义变量,自动初始化为0值.如果提供初始化值,可省略变量类型,由编译器自动推断. 在函数内部可以使用 := 方式定义变量 func main() { x := 123 } 可一 ...

  2. java语言基础-类型运算细节

    代码一: public class varDemo{ public static void main(String[] args) { byte a2; a2=3+4; System.out.prin ...

  3. Swift语言指南(七)--语言基础之布尔值和类型别名

    原文:Swift语言指南(七)--语言基础之布尔值和类型别名 布尔值 Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false ...

  4. 【C语言基础】unsigned short类型用于循环的一个难点

    我在我的知识星球:“C语言解惑课堂”里的第一篇提出一个问题:[第1篇][C语言基础][unsigned short类型用于循环的一个难点]要查看更多的C语言难点解析或者需要提问的同学,微信扫扫文末我的 ...

  5. GO语言基础(结构+语法+类型+变量)

    GO语言基础(结构+语法+类型+变量) Go语言结构 Go语言语法 Go语言类型 Go语言变量       Go 语言结构 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 &a ...

  6. C#语言基础——结构体和枚举类型

    结构体和枚举类型 一.结构体(struct) 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要 ...

  7. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  8. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  9. C#语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  10. 玩转JavaScript OOP[0]——基础类型

    前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的.处理一些事件的.我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统 ...

随机推荐

  1. 2021-12-18:找到字符串中所有字母异位词。 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成

    2021-12-18:找到字符串中所有字母异位词. 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引.不考虑答案输出的顺序. 异位词 指由相同字母重排列形成 ...

  2. 【设计模式】使用 go 语言实现简单工厂模式

    最近在看<大话设计模式>,这本书通过对话形式讲解设计模式的使用场景,有兴趣的可以去看一下. 第一篇讲的是简单工厂模式,要求输入两个数和运算符号,得到运行结果. 这个需求不难,难就难在类要怎 ...

  3. Django报错No module named django.core.urlresolvers

    当需要测试django能否解析网站根路径的URL,并将其对应到我们编写的某个视图函数上时,使用下面的语句 from django.core.urlresolvers import resolve 执行 ...

  4. .Net8顶级技术:IR边界检查之IR解析(二)

    前言 IR技术应用在各个编程语言当中,它属于JIT的核心部分,确实有点点麻烦.但部分基本明了.本篇通过小例子了解下.前情提要,看这一篇之前建议看看前一篇:点击此处,以便于理解. 概括 1.前奏 先上C ...

  5. {"status":-1,"statusText":"ERR_CONNECT_FAILED"}

    今日使用weex 的stream 遇到一个极坑,也极傻的问题 一.steam.fetch 下面是我使用steam.fetch调用后台接口都截图 二.页面测试 奇怪的是,我借同事是手机来进行测试,有一个 ...

  6. 【技术积累】Python中的Pandas库【二】

    如何在 Pandas 中进行文本的匹配和替换操作? 在 Pandas 中,使用 str 属性与正则表达式可以进行文本的匹配和替换操作.下面是一些常用的方法: str.contains():判断字符串中 ...

  7. 2023-06-08:给你一棵二叉树的根节点 root ,返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点(即,两个端点)之间的长度

    2023-06-08:给你一棵二叉树的根节点 root ,返回树的 最大宽度 . 树的 最大宽度 是所有层中最大的 宽度 . 每一层的 宽度 被定义为该层最左和最右的非空节点(即,两个端点)之间的长度 ...

  8. 【LeetCode】Find Pivot Index #724 Rust Solution

    给定一个整数类型的数组 nums,请编写一个能够返回数组 "中心索引" 的方法.我们是这样定义数组 中心索引 的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和.如果数 ...

  9. 手写数字识别系统Python+CNN卷积神经网络算法【完整代码】

    一.介绍 手写数字识别系统,使用Python语言,基于TensorFlow搭建CNN卷积神经网络算法对数据集进行训练,最后得到模型,并基于FLask搭建网页端界面,基于Pyqt5搭建桌面端可视化界面. ...

  10. Python潮流周刊#9:如何在本地部署开源大语言模型?

    你好,我是猫哥.这里每周分享优质的 Python 及通用技术内容,部分为英文,已在小标题注明.(标题取自其中一则分享,不代表全部内容都是该主题,特此声明.) 首发于我的博客:https://pytho ...