当前位置: 首页 > 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;通过一个例子来介绍接口的优点。…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...