【GO语言基础】基本数据类型
系列文章目录
【Go语言学习】ide安装与配置
【GO语言基础】前言
【GO语言基础】变量常量
【GO语言基础】数据类型
文章目录
- 系列文章目录
- 数据类型
- 数值型:
- 整数类型:
- 浮点数类型:
- 字符型-布尔型-字符串
- 零值
- 转义字符
- 常用类型转换
- 运算符
- 总结
数据类型

数值型:
整数类型:
注意:u开头为无符号数,在C语言中,例如,有 "unsigned int"(无符号整型)和 "unsigned short"(无符号短整型)等类型,它们都以 "u" 或 "unsigned" 开头。无符号数只能表示正数和零,不能表示负数。
| 类型 | 取值范围 | 大小(字节) |
|---|---|---|
| int | 根据平台变化 | 32或64 |
| int8 | -128到127 | 1 |
| int16 | -32768到32767 | 2 |
| int32 | -2147483648到2147483647 | 4 |
| int64 | -9223372036854775808到9223372036854775807 | 8 |
| uint | 根据平台变化 | 32或64 |
| uint8 | 0到255 | 1 |
| uint16 | 0到65535 | 2 |
| uint32 | 0到4294967295 | 4 |
| uint64 | 0到18446744073709551615 | 8 |
package mainimport ("fmt""unsafe"
)func main() {var New1 int = 1var New2 int8 = 1var New3 int16 = 1var New4 int32 = 1var New5 int64 = 1//无符号数var New6 uint = 1var New7 uint8 = 1var New8 uint16 = 1var New9 uint32 = 1var New10 uint64 = 1fmt.Println(New1, New2, New3, New4, New5, New6, New7, New8, New9, New10)//unsage.Sizeof输出数据类型存储的大小fmt.Println(unsafe.Sizeof(New1))fmt.Println(unsafe.Sizeof(New2))fmt.Println(unsafe.Sizeof(New3))fmt.Println(unsafe.Sizeof(New4))fmt.Println(unsafe.Sizeof(New5))fmt.Println("无符号数:")fmt.Println(unsafe.Sizeof(New6))fmt.Println(unsafe.Sizeof(New7))fmt.Println(unsafe.Sizeof(New8))fmt.Println(unsafe.Sizeof(New9))fmt.Println(unsafe.Sizeof(New10))
}

浮点数类型:
| 类型 | 取值范围 | 大小(字节) |
|---|---|---|
| float32 | ±1.18e-38 to ±3.4e38 | 4 |
| float64 | ±2.23e-308 to ±1.8e308 | 8 |
package mainimport ("fmt""unsafe"
)func main() {//浮点数类型var New1 float32 = 3.14var New2 float64 = 3.1415926fmt.Println(New1, New2)//unsage.Sizeof输出数据类型存储的大小fmt.Println(unsafe.Sizeof(New1))fmt.Println(unsafe.Sizeof(New2))
}

字符型-布尔型-字符串
| 类型 | 取值范围 | 大小(字节) |
|---|---|---|
| 字符(byte) | uint8 类型,代表一个ASCII字符 | 1字节 |
| 布尔型(bool) | true 或 false | 1字节(通常) |
| 字符串(string) | 由多个字符组成的序列,以空字符(‘\0’)结尾 | 变长,取决于字符串的长度 |
package mainimport ("fmt""unsafe"
)func main() {// 字符型(byte)var b byte = 'a'fmt.Printf("Byte: %c\n", b)// 布尔型var boolVar bool = truefmt.Println("Bool:", boolVar)// 字符串,技巧使用:反引号括起来的字符串可以原样输出var strVar string = "Hello, Go!"fmt.Println("String:", strVar)//unsage.Sizeof输出数据类型存储的大小fmt.Println(unsafe.Sizeof(b))fmt.Println(unsafe.Sizeof(boolVar))fmt.Println(unsafe.Sizeof(strVar))
}

零值
在Go中,所有声明的变量都会被赋予一个零值,例如,int类型的零值是0,string类型的零值是空字符串。
package mainimport "fmt"func main() {var New1 intvar New2 stringfmt.Println(New1)fmt.Println(New2)
}

转义字符
| 转义字符 | 描述 |
|---|---|
\n | 换行符,表示一个新的行开始。 |
\r | 回车符,表示回到当前行的开头。 |
\t | 制表符,表示一个制表位(Tab)。 |
\" | 双引号,用于表示包含在字符串中的双引号。 |
\' | 单引号,用于表示包含在字符串中的单引号。 |
\\ | 反斜杠,用于表示包含在字符串中的反斜杠本身。 |
\0 | 空字符,表示一个空字符。 |
\xHH | 十六进制转义字符,用于表示一个两位十六进制数表示的字节。例如,\x0A表示换行符(ASCII码为10)。 |
\uHHHH | Unicode转义字符,用于表示一个四位十六进制数表示的Unicode字符。例如,\u0020表示空格字符(Unicode码为U+0020)。 |
\UHHHHHHHH | 大写Unicode转义字符,用于表示一个八位十六进制数表示的Unicode字符。例如,\U00000020表示空格字符(Unicode码为U+0020)。 |
常用类型转换
自定义类型之间的转换
自定义类型之间的转换取决于它们的底层类型。如果底层类型相同,那么它们可以相互转换。
如float64转换为int
package mainimport ("fmt""reflect"
)func main() {var a int = 42var b float64 = float64(a) // 将整数转换为浮点数//输出数据fmt.Println(b)//输出数据类型fmt.Println("b 的类型:", reflect.TypeOf(b))
}
数值类型:
- 可以将整数类型转换为浮点数类型,例如int转换为float64。
- 可以将浮点数类型转换为整数类型,但会丢失小数部分,例如float64转换为int。
- 不同大小的整数类型之间可以相互转换,但注意可能会导致溢出或数据丢失。
package mainimport ("fmt""reflect"
)func main() {var x int = 42var y float64 = float64(x) // int到float64的显式转换fmt.Println(x)fmt.Println("y 的类型", reflect.TypeOf(y))fmt.Println("")//float64转换int后精度丢失var f float64 = 58.0022var z int = int(f)fmt.Println(f)fmt.Println("f 的类型(转换前)", reflect.TypeOf(f))fmt.Println(z)fmt.Println("z 的类型(转换后)", reflect.TypeOf(z))
}

字符串类型:
- 可以将字符串转换为字节数组或切片,例如string转换为[]byte。
- 可以将字节数组或切片转换为字符串,例如[]byte转换为string。
- 可以将一些数值类型转换为字符串,例如int转换为string。
- 在字符类型转换中常用
strconv包(点我跳转中文网)。

package mainimport ("fmt""reflect""strconv"
)func main() {var New1 int = 555fmt.Println(New1)fmt.Println("New1的数据类型是:", reflect.TypeOf(New1))// 将整数转换为字符串var New2 string = strconv.Itoa(New1)fmt.Println(New2)fmt.Println("New2的数据类型是:", reflect.TypeOf(New2))// 将浮点数转换字符串var New3 float64 = 3.14fmt.Println(New3)fmt.Println("New3的数据类型是:", reflect.TypeOf(New3))var New4 string = strconv.FormatFloat(New3, 'f', -1, 64)//第一个参数是要转换的浮点数。//第二个参数是格式标记,其中'f'表示使用普通的浮点数格式。//第三个参数是精度,-1表示使用尽可能多的精度。//第四个参数是浮点数的位数,通常使用64表示float64类型。fmt.Println(New4)fmt.Println("New4的数据类型是:", reflect.TypeOf(New4))}

布尔类型:
布尔类型不能直接转换为其他数据类型,也不能从其他类型直接转换为布尔类型,需要使用条件语句来进行转换。
package mainimport ("fmt""reflect""strconv"
)func main() {var b1 bool = truevar b2 bool = false// 不能直接将b1转换为b2或反之,需要使用条件语句或逻辑运算符来转换b1 = !b2 // 使用逻辑非来转换fmt.Println(b1)fmt.Println("b1数据类型是", reflect.TypeOf(b1))//布尔转换为字符串\var New1 string = strconv.FormatBool(b1)fmt.Println(New1)fmt.Println("New1数据类型是", reflect.TypeOf(New1))
}

运算符
| 运算符 | 描述 |
|---|---|
| + | 加法 |
| - | 减法 |
| * | 乘法 |
| / | 除法 |
| % | 取余 |
| ++ | 自增(前置) |
| – | 自减(前置) |
| +++ | 自增(后置) |
| – | 自减(后置) |
| & | 取地址运算符 |
| &^ | 按位取反运算符 |
| ^ | 按位异或运算符 |
| | | 按位或运算符 |
| &<< | 左移位运算符 |
| &>> | 右移位运算符 |
| == | 等于运算符 |
| != | 不等于运算符 |
| > | 大于运算符 |
| < | 小于运算符 |
| >= | 大于等于运算符 |
| <= | 小于等于运算符 |
| && | 逻辑与运算符 |
| || | 逻辑或运算符 |
| ! | 逻辑非运算符 |
| << | 低位位移运算符 |
| >> | 高位位移运算符 |
| += | 加等于运算符 |
| -= | 减等于运算符 |
| *= | 乘等于运算符 |
| /= | 除等于运算符 |
| %= | 取模等于运算符 |
| &= | 按位与等于运算符 |
| ^= | 按位异或等于运算符 |
| |= | 按位或等于运算符 |
| &=<< | 低位左移位等于运算符 |
| &=>> | 低位右移位等于运算符 |
package mainimport "fmt"func main() {//算术运算符var a, b int = 10, 5fmt.Println(a + b) // 加法fmt.Println(a - b) // 减法fmt.Println(a * b) // 乘法fmt.Println(a / b) // 除法fmt.Println(a % b) // 取余//赋值运算符var c intc = 100fmt.Println(c)c += 50 // 简写加法赋值:等于c=c+50fmt.Println(c)c -= 20 // 简写减法赋值:等于c=c-20fmt.Println(c)c *= 3 // 简写乘法赋值:c=c*20fmt.Println(c)c /= 10 // 简写除法赋值:c=c/20fmt.Println(c)//比较运算符var d, e int = 50, 75fmt.Println(d == e) // 等于,输出 falsefmt.Println(d != e) // 不等于,输出 truefmt.Println(d < e) // 小于,输出 truefmt.Println(d > e) // 大于,输出 falsefmt.Println(d <= e) // 小于等于,输出 truefmt.Println(d >= e) // 大于等于,输出 false//位运算符var f, g uint8 = 5, 3fmt.Println(f & g) // 按位与,输出 1fmt.Println(f | g) // 按位或,输出 7fmt.Println(f ^ g) // 按位异或,输出 6fmt.Println(f << 2) // 左移,输出 20fmt.Println(f >> 2) // 右移,输出 1//其他运算符var h bool = truevar i int = 42fmt.Println(!h) // 取反,输出 falsefmt.Println(+i) // 取正,输出 42(正数)fmt.Println(-i) // 取负,输出 -42(负数)fmt.Println(i << 3) // 无符号左移,输出 168(无符号8位数的正数)
}
非布尔数据类型不能使用取反
总结
需要根据数据类型之间的关系选择合适的方法。需要特别注意的是,不支持任意类型的隐式转换,必须使用显式类型转换来完成转换操作,并且在一些情况下可能会引起精度丢失或运行时错误。因此,在进行数据类型转换时,务必小心谨慎。
相关文章:
【GO语言基础】基本数据类型
系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录数据类型数值型:整数类型:浮点数类型: 字符型-布尔型-字符串零值转义字符 常用类型转换运算符总结 数据…...
【Python】OpenCV立体相机配准与三角化代码实现
下面的介绍了使用python和OpenCV对两个相机进行标定、配准,同时实现人体关键点三角化的过程 import cv2 as cv import glob import numpy as np import matplotlib.pyplot as pltdef calibrate_camera(images_folder):images_names = glob.glob(images_folder...
通过Idea或命令将本地项目上传至git
通过Idea或命令将本地项目上传至git 一、Git创建仓库 1、登录Gitee账号,点击新建 2、填写如下相关信息,点击创建 3、在此处可以复制项目链接 二、Idea配置和解绑git,提交项目 1、idea打开项目,操作如下 2、在弹框里选择…...
python selenium 爬虫教程
Python和Selenium是很强大的爬虫工具,可以用于自动化地模拟浏览器行为,从网页中提取数据。下面是一个简单的使用Python和Selenium进行爬虫的案例。 入门: 1. 安装和配置: 首先,你需要安装Python和Selenium。可以使用…...
Linux基础知识及常见指令
Linux简介及相关概念 什么是Linux? Linux是一个免费开源的操作系统内核,最初由Linus Torvalds于1991年创建。它是各种Linux发行版(通常称为“发行版”)的核心组件,这些发行版是完整的操作系统,包括Linux内…...
分享一个基于Python和Django的产品销售收入数据分析系统源码
💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…...
UniTask保姆级教程
目录 一、UniTask的简介和安装 https://github.com/Cysharp/UniTask.gitpathsrc/UniTask/Assets/Plugins/UniTask 空载性能测试 二、基础用法详解 三、基础用法扩展 四、进阶 五、VContainer简介 六、VContainer基础实例 方便快速查找 一、UniTask的简介和安装 项目地…...
uni-app 可视化创建的项目 移动端安装调试插件vconsole
可视化创建的项目,在插件市场找不到vconsole插件了。 又不好npm install vconsole 换个思路,先创建一个cli脚手架脚手架的uni-app项目,然后再此项目上安装vconsole cli脚手架创建uni-app项目 安装插件 项目Terminal运行命令:npm…...
HOperatorSet.GenRandomRegions 有内存泄漏或缓存,释放不掉
开发环境 VS2022 win7 halcon12 halcon18 随机生成100个园 不释放 private void butTemp_Click(object sender, EventArgs e) { butTemp.Enabled false; HOperatorSet.SetSystem("clip_region", "false"); …...
一维数组笔试题及其解析
Lei宝啊 :个人主页 愿所有美好不期而遇 前言: 数组名在寻常情况下表示首元素地址,但有两种情况例外: 1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小 2.&数组名,这里的…...
微信小程序源码
1:仿豆瓣电影微信小程序 https://github.com/zce/weapp-demo 2:微信小程序移动端商城 https://github.com/liuxuanqiang/wechat-weapp-mall 3:Gank微信小程序 https://github.com/lypeer/wechat-weapp-gank 4:微信小程序高仿QQ…...
Browserslist 信息和配置使用整理
我们可以在各种前端工程看到 Browserslist 的配置身影,看似简单但实际上可能会有暗坑导致线上兼容问题,借此文来整理下 Browserslist 的信息。 Browserslist 是由 Autoprefixer 团队维护的一个开源项目,用于自动处理 CSS 和 JavaScript 文件…...
Matlab 如何选择采样频率和信号长度
Matlab 如何选择采样频率和信号长度 1、概述 在实际信号分析中经常会遇到要分辨出频率间隔为 的两个分量,在这种情形中如何选择采样频率和信号的长度呢? 2、案例分析 设有一个信号由三个正弦信号组成,其频率分别为 ,即…...
TPTU: Task Planning and Tool Usage of Large Language Model-based AI Agents
本文是LLM系列文章,针对《TPTU: Task Planning and Tool Usage of Large Language Model-based AI Agents》的翻译。 TPTU:任务规划和工具使用的LLM Agents 摘要1 引言2 方法3 评估4 相关工作5 结论 摘要 随着自然语言处理的最新进展,大型语言模型&…...
【Spring IoC容器的加载过程】
加载配置文件 Spring IoC容器的配置通常以XML形式存储,并通过ResourceLoader和XmlBeanDefinitionReader类来加载。ResourceLoader主要负责加载Bean配置文件,而XmlBeanDefinitionReader则负责解析这些文件,将Bean定义封装为BeanDefinition对象…...
C++多文件类的声明与实现
...
16 “count(*)“ 和 “count(1)“ 和 “count(field1)“ 的差异
前言 经常会有面试题看到这样的问题 “ select count(*) ”, “ select count(field1) ”, “ select count(1) ” 的效率差异啥的 然后 我们这里 就来探索一下 这个问题 我们这里从比较复杂的 select count(field1) 开始看, 因为 较为复杂的处理过程 会留一下一些关键的调试…...
【云原生进阶之PaaS中间件】第一章Redis-1.4过期策略
1 设置带过期时间的 key # 时间复杂度:O(1),最常用方式 expire key seconds# 字符串独有方式 setex(String key, int seconds, String value)除了string独有设置过期时间的方法,其他类型都需依靠expire方法设置时间&a…...
windows弹出交互式服务检测一键取消bat脚本
现象 脚本命令 新建一个bat文件,将下面的脚本拷贝进去,保存,双击即可 禁用服务:重启电脑的时候不会启动 停止服务:立即停止服务,马上生效的 sc config UI0Detect start disabled net stop UI0Detect...
接口使用的最佳时机
1. 引言 接口在系统设计中,以及代码重构优化中,是一个不可或缺的工具,能够帮助我们写出可扩展,可维护性更强的程序。 在本文,我们将介绍什么是接口,在此基础上,通过一个例子来介绍接口的优点。…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
