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

golang 基本数据类型

1.  go语言的数据类型简介

golang的数据类型分为两大类,一类是基本数据类型和符合数据类型;

按照传递的内容分:传递本身数据和传递地址;

golang和java很相似,都是值传递,不过分为传递的值和传递的地址,传递地址的叫做引用传递;

2.基本数据类型

基本数据类型有:整数、浮点数、布尔型、字符

2.1 整数类型

(1)介绍

类型范围占用空间有无符号
int8-2^7到2^7-11个字节
int16-2^15到2^15-12个字节
int32-2^31到2^31-14个字节
int64-2^63到2^63-18个字节
uint80到2^8-11个字节
uint160到2^16-12个字节
uint320到2^32-14个字节
uint640到2^64-18个字节

        注意: 在使用 int 和 uint 类型时,不能假定它是 32 位或 64 位的整型,而是考虑 int 和 uint可能在不同平台上的差异。
        注意事项: 实际项目中整数类型、切片、 map 的元素数量等都可以用 int 来表示。
        在涉及 到二进制传输、为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使 用 int 和 uint 。

(2)整数常见的进制以及占位符表示

package mainimport "fmt"func main() {//二进制a := 0b1001fmt.Printf("%d \n", a)fmt.Printf("%b \n", a)//十进制b := 0377fmt.Printf("%o \n", b)//十六进制c := 0xfffmt.Printf("%d \n", c)// 显示数据的数据类型fmt.Printf("%T \n",c)
}

2.2 浮点数

类型存储空间范围
float324字节-3.403e38~3.403e38
float648字节-1.798e308~1.798e308
import ("fmt""unsafe"
)func main() {var float1 float32 = 1.23fmt.Printf("%f \n", float1) //默认保留6位小数fmt.Printf("%.2f \n", float1)//float32 占用4位,并且类型位float32var a float32 = 3.14fmt.Printf("值为%v--%f,类型%T\n", a, a, a)fmt.Println(unsafe.Sizeof(a)) //占4个字节//float64 占用8位,并且类型位float64var b float64 = 1.23fmt.Printf("值为%v--%f,类型%T\n", b, b, b)fmt.Println(unsafe.Sizeof(b))}

Golang 中 float 精度丢失问题

        几乎所有的编程语言都有精度丢失这个问题,这是典型的二进制浮点数精度损失问题,在定

长条件下,二进制小数和十进制小数互转可能有精度丢失。这个问题在银行系统中特别致命。

如何解决:在java中有一个叫做bigdecimal的类可以解决这个问题,在golang中也有一个decimal可以解决这个问题

package mainimport ("fmt""github.com/shopspring/decimal"
)func main() {decimal1, err := decimal.NewFromString("1129.6")decimal2, err := decimal.NewFromString("100")result := decimal1.Mul(decimal2)if err != nil {fmt.Println("转化失败:", err)}fmt.Println(result)
}

2.3 布尔类型

var fl = false
if f1 {fmt.Println("true")
} else {fmt.Println("false")
}

2.4 字符串类型

Go语言里的字符串的内部实现使用UTF-8编码。字符串的值为双引号(")中的内容

字符串处理的基本方法

package mainimport ("fmt""strings"
)func main() {var str string = "hello,world"//len求字符串的长度fmt.Println(len(str))//fmt.sprintf拼接字符串fmt.Println(fmt.Sprintf("我真的%s", "帅"))//字符串中是否包含fmt.Println(strings.Contains(str, "hello"))//以,分割字符串fmt.Println(strings.Split(str, ","))arr := []string{"hello", "world"}//拼接字符串,sep什么为间隔fmt.Println(strings.Join(arr, ","))//是否有后缀fmt.Println(strings.HasSuffix(str, "world"))//是否有前缀fmt.Println(strings.HasPrefix(str, "hello"))//子字符串最开始出现的位置fmt.Println(strings.Index(str, "ell"))//子字符串最后开始出现的位置fmt.Println(strings.LastIndex(str, "l"))
}

2.5字符

组成每个字符串的元素叫做 “字符”,可以通过遍历字符串元素获得字符。字符用单引号 ‘’ 包裹起来

Go语言中的字符有以下两种类型

uint8类型:或者叫byte型,代表了ACII码的一个字符
rune类型:代表一个UTF-8字符
当需要处理中文,日文或者其他复合字符时,则需要用到rune类型,rune类型实际上是一个int32

Go使用了特殊的rune类型来处理Unicode,让基于Unicode的文本处理更为方便,也可以使用byte型进行默认字符串处理,性能和扩展性都有照顾。

需要注意的是,在go语言中,一个汉字占用3个字节(utf-8),一个字母占用1个字节

package mainimport "fmt"func main() {var a byte = 'a'fmt.Println(a)fmt.Printf("%c \n", a)s := "你好,golang"//使用len 循环相当于打印的是ascii码for i := 0; i < len(s); i++ {fmt.Printf("%v(%c)\t", s[i], s[i])}//通过rune打印的是 utf-8字符for i, i2 := range s {fmt.Println(i, i2)}s1 := "golang"byte1 := []byte(s1)byte1[0] = 'o'fmt.Println(string(byte1))s2 := "你好,世界"byte2 := []rune(s2)byte2[0] = '不'fmt.Println(string(byte2))
}

3.基本数据类型的转化

3.1数值类型的转化
package mainimport "fmt"func main() {var a int16 = 8var b int64 = 16fmt.Println(int64(a) + b)var c int8 = 12var d float32 = 32fmt.Println(float32(c) + d)
}
3.2 转化成字符串
import ("fmt""strconv"
)func main() {//通过sprint转化成字符串s1 := fmt.Sprintf("%d", 1)fmt.Println(s1)//痛殴strconv转化var num float64 = 3.14fmt.Println(strconv.FormatFloat(num, 'f', -1, 64))
}
3.3 字符串转化成int和float类型

import ("fmt""strconv"
)func main() {str := "10"str2 := "3.14"fmt.Println(strconv.ParseInt(str, 10, 64))fmt.Println(strconv.ParseFloat(str2, 64))}

相关文章:

golang 基本数据类型

1. go语言的数据类型简介 golang的数据类型分为两大类&#xff0c;一类是基本数据类型和符合数据类型&#xff1b; 按照传递的内容分&#xff1a;传递本身数据和传递地址&#xff1b; golang和java很相似&#xff0c;都是值传递&#xff0c;不过分为传递的值和传递的地址&a…...

各种查询sql介绍

1. 关联查询&#xff08;JOIN&#xff09; 关联查询用于从多个表中检索数据。它基于两个或多个表之间的共同字段&#xff08;通常是主键和外键&#xff09;来组合数据。 内连接&#xff08;INNER JOIN&#xff09;&#xff1a; sql SELECT a.name, b.order_date FROM custome…...

Guava防击穿回源-异步防击穿

异步防击穿策略 在高并发环境下,缓存击穿(Cache Stampede)是一种常见的问题。当缓存中的热点数据失效或未命中时,大量并发请求同时访问后端数据源(如数据库),可能导致后端系统压力骤增,甚至出现崩溃。为了有效防止这种情况,可以利用Guava提供的异步缓存加载机制(类似…...

人工智能正在扼杀云计算的可持续性

可持续性曾是公共云计算中备受推崇的优势。企业和云提供商大肆宣扬他们的绿色计划&#xff0c;推广采用可再生能源的数据中心&#xff0c;以减少碳足迹。 近几个月来&#xff0c;这个话题已悄然淡出人们的视线。罪魁祸首是什么&#xff1f;对人工智能功能的无限需求正在推动云…...

C# 条形码、二维码标签打印程序

1、条码标答打印主界面 2、打印设置 3、生成QR代码 private void GetBarcode_T(string lr) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();//创建一个对象 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; //设置编码测量…...

嵌入式入门学习——6Protues点亮数码管,认识位码和段码,分辨共阴还是共阳(数字时钟第一步)

0 系列文章入口 嵌入式入门学习——0快速入门&#xff0c;Let‘s Do It&#xff01; 首先新建基于Arduino UNO的protues工程&#xff0c;见本系列第3篇文章 1 点“P”按钮找器件 2 输入“seg”或“digit”查找数码管器件 3 找到我们想要的6位7段数码管 4如图A、B…DP都是段码…...

poisson过程——随机模拟(Python和R实现)

Python实现 exponential()使用&#xff0c;自动poisson过程实现。 import numpy as np import matplotlib.pyplot as plt# Parameters lambda_rate 5 # rate parameter (events per time unit) T 10 # total time# Generate Poisson process times np.random.exponential(…...

100 种下划线 / 覆盖层动画 | 终极 CSS(层叠样式表)集合

还在为你的菜单项和链接寻找动画效果而感到疲惫吗&#xff1f; 不用再找了&#xff01;这里列出了 100 多种不同的动画。从简单的到更复杂的&#xff0c;你肯定能找到自己想要的。 无需 SVG&#xff08;可缩放矢量图形&#xff09;&#xff0c;无需 JavaScript&#xff08;脚…...

华为ICT大赛2024-2025网络赛道考试分析

华为ICT大赛2024-2025正在报名中&#xff0c;网络赛道的同学如何备考&#xff0c;了解考试内容呢&#xff1f; 一、考试概况 华为ICT大赛分为4个赛段&#xff0c;分别为省赛初赛、省赛复赛、中国总决赛&#xff0c;全球总决赛。其中对应的能力级别分别如下&#xff1a; 省赛…...

linux 效率化 - 输入法 - fcitx5

安装 Fcitx5 1. 卸载 ibus 框架 由于 ibus 和 fcitx 可能会冲突&#xff0c;先卸载 ibus&#xff08;暂未确认原因&#xff09; sudo apt remove --purge ibus2. 安装 fcitx5 输入法框架 sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk…...

YOLOv11改进策略【卷积层】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构

一、本文介绍 本文记录的是基于RepVit的YOLOv11轻量化改进方法研究。RepVit的网络结构借鉴ViT的设计理念,通过分离的token mixe和channel mixer减少推理时的计算和内存成本,同时减少扩展比率并增加宽度,降低延迟,并通过加倍通道来弥补参数大幅减少的问题,提高了准确性。本…...

一天认识一个硬件之路由器

今天来给大家分享一下路由器的知识&#xff0c;先来说一下什么是路由器&#xff0c;路由器是一种计算机网络设备&#xff0c;它的主要作用是在不同的网络之间转发数据包&#xff0c;实现数据的传输和共享&#xff0c;介绍完了什么是路由器&#xff0c;再来介绍一下路由器的定义…...

【scene_manager】与 MoveIt 机器人的规划场景进行交互

scene_manager Scene Manager包是由 Robotnik 创建的 ROS 包&#xff0c;旨在帮助构建和与 MoveIt 机器人的规划场景进行交互。 背景信息 MoveIt 规划场景 是一个用于存储机器人周围世界的表示&#xff08;外部碰撞&#xff09;以及机器人自身状态&#xff08;内部碰撞和当…...

数据结构单向链表的插入和删除(一)

链表 一、链表结构&#xff1a; &#xff08;物理存储结构上不连续&#xff0c;逻辑上连续&#xff1b;大小不固定&#xff09;二、单链表&#xff1a;三、单项链表的代码实现&#xff1a;四、开发可用的链表&#xff1a;四、单链表的效率分析&#xff1a; 一、链表结构&#x…...

鸿蒙网络编程系列30-断点续传下载文件示例

1. 断点续传简介 在文件的下载中&#xff0c;特别是大文件的下载中&#xff0c;可能会出现各种原因导致的下载暂停情况&#xff0c;如果不做特殊处理&#xff0c;下次还需要从头开始下载&#xff0c;既浪费了时间&#xff0c;又浪费了流量。不过&#xff0c;HTTP协议通过Range…...

深入拆解TomcatJetty(二)

深入拆解Tomcat&Jetty&#xff08;二&#xff09; 专栏地址&#xff1a;https://time.geekbang.org/column/intro/100027701 1、Tomcat支持的IO模型和应用层协议 IO模型&#xff1a; NIO&#xff1a;非阻塞 I/O&#xff0c;采用 Java NIO 类库实现。NIO2&#xff1a;异…...

单元化架构,分布式系统的新王!

0 关键收获 单元化架构通过减少故障的爆炸半径来增加系统弹性单元化架构是那些任何停机时间都被认为是不可接受的&#xff0c;或者可以显著影响最终用户的系统的一个好选择单元化架构通过强制使用固定大小的单元作为部署单元&#xff0c;并倾向于扩展而不是扩展的方法&#xf…...

【力扣打卡系列】滑动窗口与双指针(乘积小于K的子数组)

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day6 乘积小于K的子数组 题目描述解题思路 双指针移动&#xff0c;遍历右端点right&#xff0c;滑动左端点left子数组的个数&#xff1a;固定右端点r&#xff0c;子数组的个数其实就是从l到r的元…...

浅谈微前端【qiankun】的应用

一、为什么要使用微前端 微前端的核心理念是将一个大型的单体前端应用拆分成多个独立的小型应用&#xff0c;以便各个应用能够独立开发、部署和更新。这带来了以下几个好处&#xff1a; 独立开发与部署&#xff1a;各个团队可以独立开发自己的子应用&#xff0c;快速上线新功能…...

【JavaEE】——四次挥手,TCP状态转换,滑动窗口,流量控制

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;断开连接的本质 二&#xff1a;四次挥手 1&#xff1a;FIN 2&#xff1a;过程梳理 …...

别再死磕公式了!用OpenCV StereoBM/SGBM实战双目测距,从标定到3D点云一气呵成

双目视觉实战&#xff1a;从标定到3D点云的完整OpenCV实现 去年夏天&#xff0c;我尝试用两个普通的USB摄像头搭建了一个简易的深度感知系统。最初以为只要简单调用几个OpenCV函数就能搞定&#xff0c;结果在标定环节就卡了整整两周——棋盘格图像拍了几十张&#xff0c;参数却…...

传感器与变送器:工业自动化的感知与信号处理核心

1. 传感器与变送器的核心差异解析在工业自动化领域&#xff0c;传感器和变送器就像人的感官神经与语言翻译系统。传感器如同触觉、视觉等感官末梢&#xff0c;直接感知外界物理量变化&#xff1b;而变送器则像专业的同声传译&#xff0c;将原始感知信息转化为标准化的表达方式。…...

Golang笔记1-变量与类型

Go 变量与类型 1. 怎么声明变量 // var 写法&#xff1a;可以在函数外用&#xff08;全局&#xff09; var name string "张三" var age int 25 var isAdmin bool // 不赋值就是零值// : 短声明&#xff1a;只能在函数内用&#xff08;日常首选&#xff09; name :…...

2026最权威的降AI率神器横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 使AIGC率降低的关键重心是去削减文本所具有的那种机械规整感&#xff0c;往里面注入属于人类…...

终极指南:如何在Koa2中构建高性能GraphQL API

终极指南&#xff1a;如何在Koa2中构建高性能GraphQL API 【免费下载链接】koa2-note 《Koa2进阶学习笔记》已完结&#x1f384;&#x1f384;&#x1f384; 项目地址: https://gitcode.com/gh_mirrors/ko/koa2-note Koa2作为一款轻量级Node.js框架&#xff0c;凭借其优…...

终极RVM Gemset完全指南:如何优雅隔离Ruby项目依赖

终极RVM Gemset完全指南&#xff1a;如何优雅隔离Ruby项目依赖 【免费下载链接】rvm Ruby enVironment Manager (RVM) 项目地址: https://gitcode.com/gh_mirrors/rv/rvm Ruby开发中&#xff0c;项目依赖冲突是开发者最头疼的问题之一。Ruby enVironment Manager (RVM) …...

新手零基础入门网络自动化:快马AI带你写出第一个设备信息采集脚本

作为一名刚接触网络自动化运维的新手&#xff0c;我最近在InsCode(快马)平台上尝试了第一个设备信息采集脚本的编写。整个过程比我预想的要简单很多&#xff0c;尤其是平台提供的AI辅助功能&#xff0c;让我这个零基础用户也能快速上手。下面分享我的学习笔记和实际操作心得。 …...

不只是CTF:把攻防世界Reversing题当‘活教材’,提升你的Linux二进制分析实战力

从CTF到实战&#xff1a;用x64Elf-100案例解锁Linux逆向工程核心技能 逆向工程常被视为黑客的专属领域&#xff0c;但它的价值远不止于破解几个CTF题目。当一位金融科技公司的安全工程师通过逆向分析阻止了针对交易系统的0day攻击&#xff0c;或当一位恶意软件研究员仅凭二进制…...

KernelSU模块开发技术突破与实战指南

KernelSU模块开发技术突破与实战指南 【免费下载链接】KernelSU A Kernel based root solution for Android 项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU 在Android root解决方案领域&#xff0c;KernelSU凭借其内核级实现带来的稳定性和安全性&#xf…...

Kubernetes实战:构建高可用Zookeeper集群(3节点)的完整指南

1. 为什么要在Kubernetes上部署Zookeeper集群&#xff1f; Zookeeper作为分布式系统的"大脑"&#xff0c;在微服务架构中扮演着关键角色。它负责维护配置信息、命名服务、分布式同步和集群管理等核心功能。传统物理机部署Zookeeper集群时&#xff0c;我们需要手动配置…...