当前位置: 首页 > 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;过程梳理 …...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...