【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. 引言 接口在系统设计中,以及代码重构优化中,是一个不可或缺的工具,能够帮助我们写出可扩展,可维护性更强的程序。 在本文,我们将介绍什么是接口,在此基础上,通过一个例子来介绍接口的优点。…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...