首页 > 其他分享 >2.go语言基础类型漫游

2.go语言基础类型漫游

时间:2023-08-19 17:22:50浏览次数:44  
标签:语言 fmt unsafe range length Printf go 漫游 math

本篇前瞻

本篇是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语言的控制结构

标签:语言,fmt,unsafe,range,length,Printf,go,漫游,math
From: https://www.cnblogs.com/onlyac/p/17642741.html

相关文章

  • go常用的模块及命令
    在Go语言中,有许多常用的模块和命令可以帮助你进行开发和管理。以下是一些常见的模块和命令:常用模块:fmt:格式化输入输出os:操作系统功能io:输入输出操作net:网络编程http:HTTP服务器和客户端encoding/json:JSON编解码database/sql:数据库操作接口testing:测试框架time:时间和日期操作log:日志......
  • 经典c语言排序算法
    前言前段时间偶然在公众号中看到了一篇汇总c语言排序算法的文章,感觉蛮不错的,这里直接copy记录下,学习积累一下。演示C语言经典排序算法(qq.com)排序算法简介1.算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(n......
  • 第一个C语言程序
    第一个C语言程序#include<stdio.h>/*这是我的第一个C语言程序我很开心*/intmain(void){printf("hello,world\n");return0;}保存退出gcchello.c//a.out文件./a.out//hello,world注意:不要出现中文标点符号分析:[1]C语言程序绝大部分的内......
  • C语言函数(12)--- 递归(4)
    我们前一篇文章介绍了利用函数的递归来实现斐波那契数代码如下:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<windows.h>intFib(intn){ if(n<=2){ return1; } else{ returnFib(n-1)+Fib(n-2); }}intmain(void){ intn=0; intret=0;......
  • c语言笔记4
    c语言笔记4(指针)1.指针的应用1.1内存空间32位机:一次处理数据的大小4B(字节)64位机:一次处理数据的大小8B(字节)计算处理数据的最小单位是1B(字节),计算存储数据的最小单位二进制的1b(位)一个程序启动后的进程分区:栈、堆、全局区、常量区、代码区内存寻址:(32位)最大......
  • AI-1515. 自然语言处理:应用
    15.4. 自然语言推断与数据集自然语言推断(naturallanguageinference)主要研究 假设(hypothesis)是否可以从前提(premise)中推断出来,其中两者都是文本序列。换言之,自然语言推断决定了一对文本序列之间的逻辑关系。这类关系通常分为三种类型:蕴涵(entailment):假设可以从前提中推断......
  • AI百度文心一言大语言模型接入使用(中国版ChatGPT)
    一、百度文心一言API基于百度文心一言语言大模型的智能文本对话AI机器人API,支持聊天对话、行业咨询、语言学习、代码编写等功能.二、使用步骤1、接口重要提示:建议使用https协议,当https协议无法使用时再尝试使用http协议请求方式:POSThttps://luckycola.com.cn/ai/openwx......
  • Meta即将推出开源代码生成平台Code Llama,挑战OpenAI和google
    您的关注是对我最大的支持......
  • Google开源了可视化编程框架Visual Blocks for ML
    VisualBlocksforML是一个由Google开发的开源可视化编程框架。它使你能够在易于使用的无代码图形编辑器中创建ML管道。为了运行VisualBlocksforML。需要确保你的GPU是可以工作的。剩下的就是clone代码,然后运行,下面我们做一个简单的介绍:VisualBlocksforML是运行在支持jav......
  • R语言的数据结构与转换
    文章和代码已经归档至【Github仓库:<https://github.com/timerring/dive-into-AI>】或者公众号【AIShareLab】回复R语言也可获取。任何数据分析的第一步都是按照所需要的格式创建数据集。在R中,这个任务包括两个步骤:首先选择一种数据结构来存储数据,然后将数据输入或者导入这个数......