掌握Go语言的基本数据类型:编程世界的ABC

news2024/9/21 20:54:38

Go语言以其精炼的语法和卓越的性能,正日益成为现代软件开发的关键驱动力。在Go语言的众多特性中,基本数据类型的重要性不言而喻,它们是构建任何复杂应用程序的基石。正如掌握任何新语言需从其基础元素开始,Go语言的学习同样始于对其基本数据类型的深入理解。

在Go语言的世界中,基本数据类型不仅是编程的起点,更是支撑整个程序架构的支柱。熟悉这些类型,就如同掌握了Go语言的“字母表”,是深入探索和应用Go语言不可或缺的第一步。

Go语言提供的基本 数据类型

Go语言的基本数据类型构成了程序设计的基础框架,它们可以归纳为以下几类。

  1. 整型:提供了一系列不同位数和符号的整数类型,包括intint8int16int32int64及无符号整数uint等,以满足不同精度和性能需求。
  2. 浮点型:用于表示实数,包含单精度的float32和双精度的float64,适用于需要执行浮点运算的场景。
  3. 布尔型:表示逻辑值,仅有truefalse两个值,常用于逻辑判断和条件控制。
  4. 字符串:用于存储和操作文本数据,是由字符组成的不可变序列。
  5. rune 类型:代表一个Unicode码点,等同于int32,用于处理Unicode字符。
  6. byte类型:作为uint8的别名,常用于处理字节数据。

这些基本数据类型是Go语言编程的基石,为开发者提供了丰富的选项来实现各种程序设计需求。

int类型

定义int类型:

var int1 = 1
fmt.Printf("int1类型:%T\n", int1)

输出结果如下:

int1类型:int

注意:%T 查看变量的类型。

进制转化

数值声明与进制表达相互独立,在Go中均以int类型存储,提供了在不同进制间灵活转换的能力。利用fmt包的格式化动词,我们可以在输出时直接转换进制,简化代码并提高效率,便于开发中快速展示数值的各种进制形式。

var i1 = 101
fmt.Printf("%d\n", i1) //转成十进制
fmt.Printf("%b\n", i1) //把十进制转成二级制
fmt.Printf("%o\n", i1) //把十进制转成八进制
fmt.Printf("%x\n", i1) //把十进制转成十六进制
fmt.Println("-----")

输出结果如下:

数值为:101
把十进制转成二级制:1100101
把十进制转成八进制:145
把十进制转成十六进制:65
定义八进制

八进制一定是以0开头的,逢八进一位。

i2 := 077
fmt.Printf("i2十进制:%d\n", i2)
fmt.Printf("i2八进制:%o\n", i2)
fmt.Printf("i2类型%T\n",i2)

输出结果如下:

i2十进制:63
i2八进制:77
i2类型int
定义十六进制

从0到f,逢十六进一。

i3 := 0x1234567
fmt.Printf("i3十进制:%d\n", i3)
fmt.Printf("i3十流进制:%x\n", i3)
// %T 查看变量的类型
fmt.Printf("i3十进制数据类型:%T\n", i3)

输出结果如下:

i3十进制:19088743
i3十六进制:1234567
i3十进制数据类型:int

总结:我们发现直接定义十进制、八进制、十六进制的变量,变量的类型都是int型。

抛出问题

我们怎么定义 int8/int16/int32/int64 类型的数据呢?其实非常简单:

i4 := int8(1)
i5 := int16(1)
i6 := int32(1)
i7 := int64(1)
fmt.Printf("i4:%T\n", i4)
fmt.Printf("i5:%T\n",i5)
fmt.Printf("i6:%T\n",i6)
fmt.Printf("i7:%T\n",i7)

输出结果如下:

i4:int8
i5:int16
i6:int32
i7:int64

抛出问题:Go有这么多种int类型,怎么选择使用哪种呢?

首先要知道这些类型的区别:

  • int8类型大小为 1 字节
  • int16类型大小为 2 字节
  • int32类型大小为 4 字节
  • int64类型大小为 8 字节
  • int类型的大小为4个字节或8个字节

其中,int类型要重点说一下:Go语言中 int 的大小和操作系统位数相关。如果是32位操作系统,int 类型的大小就是4字节;如果是64位操作系统,int 类型的大小就是8个字节。

由此可以知道,根据自己需要的字节数来选择,当然选择int类型是最省心安全的,但是当取值范围小的时候,会浪费存储空间。

float类型

Go中的float可以细分为:float32和float64。

定义float
f1 := 1.0
fmt.Printf("f1类型:%T\n", f1) // Go语言中的小数默认类型是:float64

输出结果如下:

f1类型:float64

分析:在未指定类型定义float时,默认的类型是float64。与int类型的定义是一致的。

反思:这种设计也可以很好理解,出于数据安全的考虑,设置数据类型对应的最大内存空间的类型,避免内存溢出等问题。

定义float32类型

聪明的你一定会想到,和定义int8是一样的:

f2 := float32(1.4321)
fmt.Printf("%T\n", f2)

输出结果如下:

f2类型:float32
小技巧

我们可以通过内置的Math函数,获得常用的数值,比如:

var maxFloat = math.MaxFloat32;
println(maxFloat)

输出结果如下:

+3.402823e+038

注意:在Go中,数据类型是有严格区分的,不同类型之间不能互相转换,比如:

在这里插入图片描述

bool类型

定义
b1 := true
fmt.Printf("b1类型:%T\n", b1)

输出结果如下:

b1类型:bool
默认值为false
var b2 bool
// 前面有2个% 后面也要传2次参数
fmt.Printf("b2类型为:%T 值为: %v\n", b2, b2)

输出结果如下:

b2类型为:bool 值为: false

字符串类型

  • Go语言中的字符串由双引号包裹。
s1 := "123"
s2 := "我们"
s3 := "mystring"
  • Go语言中单引号包裹的是字符(单独的字母、汉字、符号、数字)
s1 := '1'
s2 := '我'
s3 := 's'
// 字节:1个字节=8Bit(8个二进制位)
// 一个字符'A' = 1个字节
// 一个utf8编码的汉字一般占3个字节 (比如‘沙’)

rune类型

rune它是int32的别名(-2147483648~2147483647),相比于byte(-128~127),可表示的字符更多。由于rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。在平时计算中文字符,可用rune。

当我们数据中有中文时,一定要注意rune的处理。

len()详解

len()获得的是 byte 字节的数量,一个中文占用3个字节。

s := "Hello王"
sHello := "Hello"
sWang := "王"
//len()获得的是 byte 字节的数量
fmt.Println(len(s))
fmt.Println(len(sHello))
fmt.Println(len(sWang))

输出结果是:8 5 3。

循环输出字符串
s := "Hello王"
for i := 0; i < len(s); i++ {
   fmt.Printf("%c\n", s[i])
}

输出结果如下:

在这里插入图片描述

我们发现英文可以正常输出,但是中文通过这种方式输出会乱码。

循环输出中文字符串

我们可以通过for range循环,从字符串中拿出具体的字符:

s := "Hello王"
for _, c := range s {
   fmt.Printf("%c\n", c) //%c 字符
}

输出结果如下:

在这里插入图片描述

字符串的修改

字符串修改是不能直接修改的,需要转成rune切片后再修改:

s2 := "小白兔"
s3 := []rune(s2)        //把字符串强制转成rune切片
s3[0] = '大'             //注意 这里需要使用单引号的字符,而不是双引号的字符串
fmt.Println(string(s3)) //把rune类型的s3强转成字符串

输出结果:大白兔

字符和字符串的区别

字符和字符串是两种不同的数据类型,它们的主要区别在于表示和存储的方式。

字符使用单引号''定义,表示一个单独的字符,等同于int32类型,存储为单个Unicode码点。

字符串使用双引号""定义,可以包含多个字符,存储为uint8类型的字节序列,如果是UTF-8编码的字符串,一个字符可能占用多个字节。

c1 := "红"
c2 := '红'                            
fmt.Printf("c1的类型:%T c2的类型:%T \n", c1, c2) 
c3 := "H"                            
c4 := 'H'                            
fmt.Printf("c3的类型:%T c4的类型:%T \n", c3, c4) 

输出结果如下:

c1的类型:string c2的类型:int32 
c3的类型:string c4的类型:int32 

总结:我们发现只要是双引号包裹的类型就是string,只要是单引号包裹的类型就是int32,也就是rune。与中英文无关。

知识点:rune的别名是int32。

类型转换

类型转换在编程中是将一个类型的值转换成另一个类型的操作。在Go语言中,如果需要将一种基本类型的值转换成另一种基本类型,需要显式地进行类型转换。

n1 := 10
var f float64
f = float64(n1)
fmt.Printf("f的类型是:%T f的值是:%v\n", f,f)

输出结果如下:

f的类型是:float64 f的值是:10

总结

  1. Go语言中对类型有严格的要求,不同类型之间不能直接转换,哪怕int8/int16之间也不能转换。
  2. 声明变量同时赋值的方式,如果没有指定明确的数据类型,会默认使用范围大的类型,比如 int、float64、false。
  3. 字符串的修改要转成rune切片,而不能像PHP一样直接修改。

欢迎关注 ❤

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:csdn面试群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【qt】windows下qt连接数据库

1.新建数据库 create database mydatabase;2.新建表结构&#xff0c;并插入数据 3.qt下连接数据库 1.连接数据库&#xff0c;需要加sql 2.添加QsqlDatabase头文件&#xff0c;使用提示句柄&#xff0c;头文件QMessageBox 3.连接数据库 4.界面设计 5.插入实现 注意这里如果…

盛水最多的容器问题

目录 一题目概述&#xff1a; 二思路理解&#xff1a; 三解答代码&#xff1a; 一题目概述&#xff1a; leetcode链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二思路理解&#xff1a; 首先这道题虽然看起来简单&#xff0c;很难不让人想到直接暴力破解它&a…

【操作系统】12.文件系统是怎么管理的?

2.文件系统是怎么管理的&#xff1f; 2.1 文件系统的实现 2.1.1 文件系统层次结构 用户调用接口 文件目录系统 存取控制验证模块 逻辑文件系统与文件信息缓冲区 物理文件系统 辅助分配模块 设备管理程序模块 2.1.2 目录实现 线性列表 哈希表 2.1.3 文件实现 文件分配方式 连续…

Unity射击游戏开发教程:(32)控制子弹射速

显示发射速度从较慢到较快的变化 这是一篇关于如何实现射速以防止玩家乱按射击按钮的快速文章。 通常做法 说到要控制子弹的射速,可以通过以下几种方法: 通过设置子弹的发射间隔时间来控制射速。在每次子弹发射后,设置一个时间延迟,确保下一枚子弹不能立即发射。 利用计时…

Redis下载安装使用教程图文教程(超详细)

《网络安全自学教程》 Redis下载安装使用 1、下载安装2、基础配置2.1、远程连接2、保护模式3、默认密码4、后台运行4.1 验证服务是否启动4.2 停止服务 1、下载安装 1&#xff09;到Redis中文网 https://www.redis.com.cn/download.html 下载Redis安装包 2&#xff09;Redis的安…

市场动荡!宝马「赶超」特斯拉?华为打响高阶智驾「价格战」

新能源汽车市场正在进入动荡期。 本周&#xff0c;欧洲市场传来重磅消息&#xff0c;宝马在欧洲的电动汽车销量首次超过特斯拉。根据JATO Dynamics的数据&#xff0c;7月宝马在欧洲本土市场销售了14,869辆电动汽车&#xff0c;以308辆的微弱优势首次超过特斯拉。 数据显示&…

“蓝屏事件”阴魂不散,微软安全更新导致 Linux 系统无法启动即解决方案

最近&#xff0c;众多Linux用户报告称他们的设备在尝试启动时&#xff0c;收到了一条神秘的错误消息&#xff1a;“系统出了严重问题。”这起事件的罪魁祸首是微软在月度安全更新中发布的一个补丁&#xff0c;用于修复一个存在已久的GRUB漏洞。 这次更新却导致了Linux和Windows…

Adobe InDesign(ID)专业的排版设计软件win/mac软件下载安装和快捷键的使用

一、Adobe InDesign软件概述 1.1 软件简介 Adobe InDesign是Adobe Systems公司开发的一款面向印刷和数字媒体出版物的专业排版设计软件。它广泛应用于书籍、杂志、报纸、宣传册、海报、广告、电子书等多种出版物的设计与制作中。InDesign以其强大的排版功能、灵活的页面布局工…

7 款最佳软件,可恢复从回收站中删除的文件

您是否曾经从回收站中删除了文件并想要恢复它们&#xff1f;这似乎是不可能的。 但是&#xff0c;从技术上讲&#xff0c;永久删除的文件不会从您的硬盘驱动器存储中删除&#xff0c;而是更改为无法识别的数据并被您的新文件覆盖。 这使您能够从系统中恢复永久删除的文件。 …

Verdi中快速查找define宏定义及其active/inactive状态

可以通过如下方式查看&#xff1a; 打开verdi后 通过 菜单栏tools -> vc apps toolbox 在VC apps toolbox 中选择Utility-》macro utility &#xff1a; 用macro utility中的三个工具分别打印报告&#xff08;各自针对不同的宏&#xff09;。生成的log文件中会显示宏定义的…

VMware上Linux系统报错--mount: 在 /dev/sr0 上找不到媒体【解决办法】

问题背景 在VMware上使用CentOS7系统&#xff0c;想要在CentOS7系统上挂载一个镜像文件&#xff0c;在系统下使用mount命令挂载报错如下所示&#xff1a; 解决办法 用lsblk命令查看sr0设备是存在的 查看虚拟机侧问题&#xff0c;右键虚拟机&#xff0c;点击设置 镜像文件已选…

宝塔面板部署雷池社区版教程

宝塔面板部署雷池社区版教程 简单介绍一下宝塔面板&#xff0c;安全高效的服务器运维面板&#xff0c;使用宝塔面板的人非常多 在网站管理上&#xff0c;许多用户都是通过宝塔面板进行管理&#xff0c;宝塔面板的Nginx默认监听端口为80和443&#xff0c;这就导致共存部署时雷…

AIGC大模型应用教学平台

1、基本介绍 AIGC大模型应用技术实训平台是我公司针对高校开设的《AIGC大模型应用技术》课程配套的实训平台。该平台采用最新的AI推理加速芯片&#xff0c;提供30Tops算力和32GB存储&#xff0c;能够运行常见的大语言模型如ChatGLM2、Llama2、Baicuan、Mistral等&#xff0c;也…

vue2 part3

vscode安装vue3 snippets 天气案例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>姓名案例_插值语法实现</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js&q…

【Linux】分析一段oom及oops报错日志

oom相关日志分析: Oom-killer错误是因系统内存分配不足&#xff0c;为保障系统正常运行会随机kill掉占用较多的内存进程。 该日志已经输出内存占满相关提示&#xff0c;内存上限为16G&#xff0c;当前已使用16G&#xff0c;内存限制导致分配失败次数为586755次。 OOPS相关日志…

24年最新最详细Python安装教程,附安装包!感觉收藏!

Python由荷兰国家数学与计算机科学研究中心的吉多范罗苏姆于1990年代初设计&#xff0c;作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及解释型语言的本质&#xff0c;使它成为多…

centos7解决病毒入侵 getty

首先使用top命令查看 找到文件地址 查看是否有自启动服务 关闭、停止、删除 tmp 病毒文件删除 清除标记 [roothost-192-168-0-66 bin]# chattr -ia /tmp/newsvc.sh [roothost-192-168-0-66 bin]# chattr -ia /tmp/redis2 [roothost-192-168-0-66 bin]# chattr -ia /tmp/svc* [r…

《黑神话:悟空》WeGame标准版和豪华版有啥区别?

黑神话悟空标准版和豪华版有什么区别&#xff1f;码笔记&#xff1a;标准版价格268元只是完整游戏&#xff0c;豪华版价格328在标准版的基础上另外提供兵器铜云棒、披挂百戏傩面、百戏护手、百戏衬钱衣、百戏吊腿、珍玩&#xff1a;风铎和游戏音乐精选集&#xff0c;详细如下&a…

使用DropZone+SpringBoot实现图片的上传和浏览

经常在项目中需要使用上传文件功能&#xff0c;找了不少前端上传组件&#xff0c;都不是很好用&#xff0c;今天尝试了一下DropZone&#xff0c;发现不错&#xff0c;顺便记录一下使用过程&#xff0c;方便后续查阅。在做开发的时候&#xff0c;经常需要调研一些技术&#xff0…

web渗透:SQL注入漏洞的基础知识

目录 SQL注入漏洞的定义和原理 SQL注入的类型和攻击方法 SQL注入的防御措施 示例代码 深入研究 SQL注入漏洞的常见攻击场景有哪些&#xff1f; 如何有效防范SQL注入攻击&#xff1f; SQL注入与跨站脚本攻击&#xff08;XSS&#xff09;之间有什么区别&#xff1f; 主要…