当前位置: 首页 > news >正文

【GO语言基础】基本数据类型

系列文章目录

【Go语言学习】ide安装与配置
【GO语言基础】前言
【GO语言基础】变量常量
【GO语言基础】数据类型


文章目录

  • 系列文章目录
  • 数据类型
    • 数值型:
      • 整数类型:
      • 浮点数类型:
    • 字符型-布尔型-字符串
    • 零值
      • 转义字符
  • 常用类型转换
  • 运算符
  • 总结


数据类型

在这里插入图片描述

数值型:

整数类型:

注意:u开头为无符号数,在C语言中,例如,有 "unsigned int"(无符号整型)和 "unsigned short"(无符号短整型)等类型,它们都以 "u" 或 "unsigned" 开头。无符号数只能表示正数和零,不能表示负数。

类型取值范围大小(字节)
int根据平台变化32或64
int8-128到1271
int16-32768到327672
int32-2147483648到21474836474
int64-9223372036854775808到92233720368547758078
uint根据平台变化32或64
uint80到2551
uint160到655352
uint320到42949672954
uint640到184467440737095516158
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.4e384
float64±2.23e-308 to ±1.8e3088
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 或 false1字节(通常)
字符串(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)。
\uHHHHUnicode转义字符,用于表示一个四位十六进制数表示的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语言基础】数据类型 文章目录 系列文章目录数据类型数值型&#xff1a;整数类型&#xff1a;浮点数类型&#xff1a; 字符型-布尔型-字符串零值转义字符 常用类型转换运算符总结 数据…...

【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账号&#xff0c;点击新建 2、填写如下相关信息&#xff0c;点击创建 3、在此处可以复制项目链接 二、Idea配置和解绑git&#xff0c;提交项目 1、idea打开项目&#xff0c;操作如下 2、在弹框里选择…...

python selenium 爬虫教程

Python和Selenium是很强大的爬虫工具&#xff0c;可以用于自动化地模拟浏览器行为&#xff0c;从网页中提取数据。下面是一个简单的使用Python和Selenium进行爬虫的案例。 入门&#xff1a; 1. 安装和配置&#xff1a; 首先&#xff0c;你需要安装Python和Selenium。可以使用…...

Linux基础知识及常见指令

Linux简介及相关概念 什么是Linux&#xff1f; Linux是一个免费开源的操作系统内核&#xff0c;最初由Linus Torvalds于1991年创建。它是各种Linux发行版&#xff08;通常称为“发行版”&#xff09;的核心组件&#xff0c;这些发行版是完整的操作系统&#xff0c;包括Linux内…...

分享一个基于Python和Django的产品销售收入数据分析系统源码

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…...

UniTask保姆级教程

目录 一、UniTask的简介和安装 https://github.com/Cysharp/UniTask.gitpathsrc/UniTask/Assets/Plugins/UniTask 空载性能测试 二、基础用法详解 三、基础用法扩展 四、进阶 五、VContainer简介 六、VContainer基础实例 方便快速查找 一、UniTask的简介和安装 项目地…...

uni-app 可视化创建的项目 移动端安装调试插件vconsole

可视化创建的项目&#xff0c;在插件市场找不到vconsole插件了。 又不好npm install vconsole 换个思路&#xff0c;先创建一个cli脚手架脚手架的uni-app项目&#xff0c;然后再此项目上安装vconsole cli脚手架创建uni-app项目 安装插件 项目Terminal运行命令&#xff1a;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宝啊 &#xff1a;个人主页 愿所有美好不期而遇 前言&#xff1a; 数组名在寻常情况下表示首元素地址&#xff0c;但有两种情况例外&#xff1a; 1.sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小 2.&数组名&#xff0c;这里的…...

微信小程序源码

1&#xff1a;仿豆瓣电影微信小程序 https://github.com/zce/weapp-demo 2&#xff1a;微信小程序移动端商城 https://github.com/liuxuanqiang/wechat-weapp-mall 3&#xff1a;Gank微信小程序 https://github.com/lypeer/wechat-weapp-gank 4&#xff1a;微信小程序高仿QQ…...

Browserslist 信息和配置使用整理

我们可以在各种前端工程看到 Browserslist 的配置身影&#xff0c;看似简单但实际上可能会有暗坑导致线上兼容问题&#xff0c;借此文来整理下 Browserslist 的信息。 Browserslist 是由 Autoprefixer 团队维护的一个开源项目&#xff0c;用于自动处理 CSS 和 JavaScript 文件…...

Matlab 如何选择采样频率和信号长度

Matlab 如何选择采样频率和信号长度 1、概述 在实际信号分析中经常会遇到要分辨出频率间隔为 的两个分量&#xff0c;在这种情形中如何选择采样频率和信号的长度呢&#xff1f; 2、案例分析 设有一个信号由三个正弦信号组成&#xff0c;其频率分别为 &#xff0c;即&#xf…...

TPTU: Task Planning and Tool Usage of Large Language Model-based AI Agents

本文是LLM系列文章&#xff0c;针对《TPTU: Task Planning and Tool Usage of Large Language Model-based AI Agents》的翻译。 TPTU:任务规划和工具使用的LLM Agents 摘要1 引言2 方法3 评估4 相关工作5 结论 摘要 随着自然语言处理的最新进展&#xff0c;大型语言模型&…...

【Spring IoC容器的加载过程】

加载配置文件 Spring IoC容器的配置通常以XML形式存储&#xff0c;并通过ResourceLoader和XmlBeanDefinitionReader类来加载。ResourceLoader主要负责加载Bean配置文件&#xff0c;而XmlBeanDefinitionReader则负责解析这些文件&#xff0c;将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 # 时间复杂度&#xff1a;O&#xff08;1&#xff09;&#xff0c;最常用方式 expire key seconds# 字符串独有方式 setex(String key, int seconds, String value)除了string独有设置过期时间的方法&#xff0c;其他类型都需依靠expire方法设置时间&a…...

windows弹出交互式服务检测一键取消bat脚本

现象 脚本命令 新建一个bat文件&#xff0c;将下面的脚本拷贝进去&#xff0c;保存&#xff0c;双击即可 禁用服务&#xff1a;重启电脑的时候不会启动 停止服务&#xff1a;立即停止服务&#xff0c;马上生效的 sc config UI0Detect start disabled net stop UI0Detect...

接口使用的最佳时机

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

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

网络编程(UDP编程)

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