【Golang】:数据类型

目录

1. 基本数据类型

1.1 布尔类型

1.2 整数类型

1.3 浮点数类型

1.4 复数类型

1.5 字符类型

1.6 字符串类型

2. 类型转换

2.1 基本数据类型 → string

2.2 string → 基本数据类型

3. 常量


1. 基本数据类型

1.1 布尔类型

Go中的布尔类型取值为true或false,占用1字节大小。如下:

package mainimport ("fmt"
)func main() {// 布尔类型var flag bool = truefmt.Printf("flag value = %t\n", flag)               // flag value = truefmt.Printf("flag type = %T\n", flag)                // flag type = bool
}

说明一下:

  • 布尔类型的默认值为false,变量声明后,如果没有给变量赋值,则保留默认值。
  • Go中在格式化字符串时,%t表示按布尔值true或false进行格式化。
  • 关系运算符和逻辑运算符都会产生布尔类型的值,条件语句和循环语句的条件部分也都是布尔类型的值。

1.2 整数类型

类型有无符号占用存储空间
int81字节
int162字节
int324字节
int648字节
uint81字节
uint162字节
uint324字节
uint648字节
int32位系统占用4字节,64位系统占用8字节
uint32位系统占用4字节,64位系统占用8字节
rune等价于int32,占用4字节
byte等价于uint8,占用1字节

1. 整数类型

// 如果不指明类型,整数变量默认是 intvar a = 10 // 默认 int 类型// 默认值:整数类型默认值为 0var b 
int fmt.Println(b) // 输出 0

2. unsafe.Sizeof

// Sizeof 是 unsafe 包中的函数,用于获取数据所占用的字节数import "unsafe" 
var a int64 
fmt.Println(unsafe.Sizeof(a)) // 输出 8(字节)

3. 格式化字符串

// %d → 十进制整数// %T → 显示变量的类型a := 10 
fmt.Printf("值: %d, 类型: %T\n", a, a) // 输出:值: 10, 类型: int

4. 字符类型

// rune → 表示 Unicode 字符(实际是 int32)
// byte → 表示 ASCII 字符(实际是 uint8)var ch rune = '你' 
var b byte = 'A' 
fmt.Println(ch, b)    // 20320 65

1.3 浮点数类型

Go中的浮点数类型如下:

类型占用存储空间表示范围
float324 字节,单精度−3.403 × 10³⁸ ~ 3.403 × 10³⁸
float648 字节,双精度−1.798 × 10³⁰⁸ ~ 1.798 × 10³⁰⁸

1. 变量声明与默认类型

// 如果不指明类型,浮点数变量默认是 float64var a = 3.14 // 默认 float64// 默认值:浮点数变量未赋值时,默认值为 0
var b float64
fmt.Println(b)      // 0

2. 浮点数存储结构:浮点数在计算机中分为三部分:符号位(sign bit)、指数位(exponent)、尾数位/小数位(mantissa/fraction)

3. 格式化输出

// %f → 按浮点数格式输出
// %.2f → 保留两位小数a := 3.14159 
fmt.Printf("%f\n", a) // 输出 3.141590 
fmt.Printf("%.2f\n", a) // 输出 3.14

1.4 复数类型

Go中的复数类型如下:

类型占用存储空间表数范围
complex648字节实部和虚部的范围与float32类型相同
complex12816字节实部和虚部的范围与float64类型相同

1.5 字符类型

Go中没有专门的字符类型,一般使用整数类型中的byte来存储单个字符。

package mainimport ("fmt"
)func main() {var a byte = 'A'fmt.Printf("类型:%T, 值:%c\n", a, a) // 类型:uint8, 值:Avar b rune = '牛'fmt.Printf("类型:%T, 值:%c\n", b, b) // 类型:int32, 值:牛
}

1.6 字符串类型

字符串就是一串固定长度的字符连接起来的字符序列,Go中的string是由单个字节连接起来的。string类型底层包含两个字段,一个字段是字符串指针,该指针指向对应的字符串,另一个字段记录着字符串的长度。

package mainimport ("fmt"
)func main() {var a string = "Hello World"fmt.Printf("类型:%T, 值:%s\n", a, a) // 类型:string, 值:Hello World// 1. string元素的访问// 注意:Go中的字符串是不可变的,因此在访问string元素时无法将元素修改为其他值。for i := 0; i < len(a); i++ {fmt.Printf("%c", a[i]) // Hello World}fmt.Println()// 2. 字符串的表示形式// 双引号表示:系统会识别字符串中的转义字符。// 反引号表示:系统不会识别字符串中的转义字符,可以实现防止攻击、输出源代码等效果。var s1 string = "Hello\nWorld"var s2 string = `Hello\nWorld`fmt.Println(s1) // Hello(换行)Worldfmt.Println(s2) // Hello\nWorld// 3. 字符串拼接var s = "hello" + "world"fmt.Println(s)       // helloworld
}

2. 类型转换

2.1 基本数据类型 → string

1. 使用 fmt.Sprintf:fmt.Sprintf 可以按照格式化规则把任意类型转换成字符串:

package mainimport "fmt"func main() {var a int = 100var b float64 = 3.1415926var c bool = truevar a1 string = fmt.Sprintf("%d", a)var b1 string = fmt.Sprintf("%.2f", b)var c1 string = fmt.Sprintf("%t", c)fmt.Println(a1, b1, c1)   // 100 3.14 true
}

2. strconv 包也能做类型转字符串,更高效

  • FormatInt函数:将int64类型的变量转换为string类型。
  • FormatFloat函数:将float64类型的变量转换为string类型。
  • FormatBool函数:将bool类型的变量转换为string类型。
  • FormatUint函数:将uint64类型的变量转换为string类型。
  • Itoa函数:将int类型变量转换为string类型,Itoa函数底层实际就是调用FormatInt函数实现的,在内部设置了按十进制进行转换。
package mainimport ("fmt""strconv"
)func main() {var a int = 100var b float64 = 3.1415926var c bool = truevar a1 string = strconv.FormatInt(int64(a), 10)var b1 string = strconv.FormatFloat(b, 'f', -1, 64)var c1 string = strconv.FormatBool(c)fmt.Println(a1, b1, c1)
}
  • 如果是 简单数值转 string → 用 strconv(性能好)

  • 如果需要 格式化输出 → 用 fmt.Sprintf(灵活)

2.2 string → 基本数据类型

  • ParseInt函数:将string类型变量转换为int64类型。
  • ParseFloat函数:将string类型变量转换为float64类型。
  • ParseBool函数:将string类型变量转换为bool类型。
  • ParseUint函数:将string类型变量转换为uint64类型。
  • Atoi函数:将string类型变量转换为int类型, Atoi函数底层实际就是调用ParseInt函数实现的,在内部设置了按十进制进行转换。
package mainimport ("fmt""strconv"
)func main() {// 1. 字符串 → 有符号整数// "123" → 要转换的字符串// 10    → 原字符串的进制(2~36)// 64    → 返回值的位数(64 表示 int64)a, err1 := strconv.ParseInt("123", 10, 64)fmt.Println(a, err1)a1, err := strconv.Atoi("520")fmt.Println(a1, err)// 2. 字符串 → 无符号整数// "255" → 需转换的字符串// 16    → 原字符串进制(这里按十六进制解析)// 64    → 返回 uint64u, err2 := strconv.ParseUint("255", 16, 64)fmt.Println(u, err2)// 3. 字符串 → 浮点数// "3.14159" → 要解析的字符串// 64        → 返回 float64;如果是 32 则返回 float32f, err := strconv.ParseFloat("3.14159", 64)fmt.Println(f, err)// 4. 字符串 → 布尔值// 支持的字符串(不区分大小写):// "1", "t", "T", "true", "TRUE", "True"// "0", "f", "F", "false", "FALSE", "False"b, err := strconv.ParseBool("t")fmt.Println(b, err)
}

3. 常量

  • 编译期确定 → 不能在运行时通过计算或函数结果赋值给常量。

  • 不可修改 → 一旦定义,值就不能改变。

  • 类型推导 → 可不写类型,编译器会根据值推导。

  • 可以是无类型常量 → 没有明确类型的常量,可以在需要时自动转换:

const x = 5   // 无类型常量
var y float64 = x // 自动转换为 float64

1. 定义方式

const 常量名 [类型] = 值const Pi = 3.14159 // 类型推导 
const Version string = "1.0.0" // 显式声明类型
  • 类型可以省略,编译器会根据值自动推导类型。

  • 常量的值必须在编译期就能确定。

2. 多个常量一起声明

const ( A = 1 BC = 3 DE
)fmt.Println(A, B, C, D , E)  // 1 1 3 3 3

3. iota 枚举常量

iota 是一个常量计数器,从 0 开始,每新增一行常量声明,iota 自动加 1。
常用于定义枚举值:

const (Sunday  = iota // 0Monday         // 1Tuesday        // 2
)
fmt.Println(Sunday, Monday, Tuesday) // 0 1 2// 也可以用在位运算:
const (_  = iota       // 忽略 0KB = 1 << (10 * iota) // 1 << 10 = 1024MB               // 1 << 20 = 1048576GB               // 1 << 30
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95594.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

旋钮键盘项目---foc讲解(开环)

这里就不过多的讲解什么原理&#xff0c;公式的变换了&#xff0c;感兴趣的可以看灯哥开源&#xff0c;讲解的非常好的。当然&#xff0c;更细致的讲解&#xff0c;也可以看b站其他教学。 我这里主要讲解我对于开环部分的理解&#xff0c;以及stm32代码的实现逻辑。可以看作是…

数据科学与计算:爬虫和数据分析案例笔记

案例 1&#xff1a;中国大学排名爬取与分析 一、任务描述 目标&#xff1a;爬取高三网中国大学排名一览表&#xff0c;提取学校名称、总分、全国排名、星级排名、办学层级等数据&#xff0c;并保存为 CSV 文件。 网址&#xff1a;2021中国的大学排名一览表_高三网 二、任务…

华测科技的3D GPR数据分析

很高兴得到了张总的支持&#xff0c;获得了他们雷达的数据&#xff0c;并写了雷达数据读取和转换文件。1 背景搜索后发现华测实力很强&#xff0c;因为他们可达到100km/h的时速&#xff0c;以前我只知道中电众益可以达到这个速度。2数据格式分析2.1 华测数据因为长时间不编程&a…

最长链(二叉树直径DFS)

题目描述现给出一棵N个结点二叉树&#xff0c;问这棵二叉树中最长链的长度为多少&#xff0c;保证了1号结点为二叉树的根。输入第1行为包含了一个正整数N&#xff0c;为这棵二叉树的结点数&#xff0c;结点标号由1至N。 接下来N行&#xff0c;这N行中的第i行包含两个正整数l[i]…

802.11 Wi-Fi 竞争机制深度分析:CSMA/CA 与 DCF

802.11 Wi-Fi 竞争机制深度分析&#xff1a;CSMA/CA 与 DCF 一、核心机制&#xff1a;CSMA/CA&#xff08;载波侦听多路访问/冲突避免&#xff09; 传统以太网使用 CSMA/CD&#xff08;冲突检测&#xff09;&#xff0c;但无线环境中无法实现冲突检测&#xff0c;因此802.11采用…

【Go语言-Day 36】构建专业命令行工具:`flag` 包入门与实战

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

C语言——深入理解指针(四)

C语言——深入理解指针&#xff08;四&#xff09; 数组名的意义sizeof&#xff08;数组名&#xff09;&#xff0c;且数组名单独放在sizeof内部&#xff0c;则这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小&数组名&#xff0c;这里的数组名表示的是整个数组…

LeetCode 刷题【42. 接雨水】

42. 接雨水 自己做 解&#xff1a;双指针左右分割容器 class Solution { public:int trap(vector<int>& height) {int res 0;int len height.size();if(len < 2) //构不成一个容器了&#xff0c;直接返回return res;int end len - 1; //右边界int…

网络的基本概念、通信原理以及网络安全问题

目录 1、 什么是网络&#xff1f; &#xff08;1&#xff09;网络的概念与本质 &#xff08;2&#xff09;电压信号的合并与抵消 &#xff08;3&#xff09;电压的本质 2、中转设备 &#xff08;1&#xff09;背景 &#xff08;2&#xff09;中转设备的处理能力与编程能…

Windows下使用WSL2创建Ubuntu子系统(更改安装位置与启动图形桌面)

Windows下使用WSL2创建Ubuntu子系统&#xff08;更改安装位置与启动图形桌面&#xff09; 本文介绍如何使用WSL2创建Ubuntu子系统&#xff0c;并更改安装位置到其他磁盘&#xff0c;并启动图形桌面Xfce4。 WSL 版本: 2.5.7.0 系统版本: Windows11 23H2 相关工具&#xff1a;Mo…

时间泄漏 TemporalLeakage

时间泄漏 TemporalLeakage: 就是后续有事件发生&#xff0c;然后才有了这个结果&#xff0c;但是在该事件发生之前&#xff0c;不应该预测该结果。 Temporal Leakage 问题是往往导致纵向Planning不“果断”。 解决方案&#xff1a;人工标注出时间发生的时刻 真值只监督时间发生…

独立书店数字化转型:绝版书修复档案系统与读者阅读行为分析营销平台

在电商冲击与阅读习惯变迁的双重压力下&#xff0c;独立书店正遭遇 “旧书修复难、新书卖不动” 的生存困境。传统模式中&#xff0c;绝版书修复依赖老师傅经验&#xff0c;单本修复周期长达 2 周&#xff0c;损耗率超 30%&#xff1b;营销缺乏数据支撑&#xff0c;导致客流年均…

const修饰指针用法详解

目录 一、const修饰变量 绕过const限制的问题 二、const修饰指针变量 1、无const修饰的指针 2、const放在*左边 3、const放在*右边 4、*两边都有const 三、使用建议 四、记忆技巧 一、const修饰变量 在C语言中&#xff0c;变量默认是可修改的。如果我们希望某个变量不能…

pcl法线估计的踩坑

1&#xff0c;normalestimation对点云法线的评估&#xff0c;只输出法线向量&#xff0c;并不输出xyz值。如果输出类型是pointnormal&#xff0c;那么这点云的法向量有值&#xff0c;xyz值都是02&#xff0c;添加点云xyz数据。可以使用 pcl::concatenatefields(*a,*b,*c)函数p…

利用Minicsv库解析csv文件的c程序及读入测试

上午的c程序写入xlsx较快但不正确&#xff0c;python程序虽正确但过慢。所以找了一个全部源程序加起来不到4K字节的C语言csv解析库Minicsv&#xff0c;来改写&#xff0c;改写结果如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h…

企微用户部门同步HRS系统

企微用户导入HR系统流程说明 概述 本文档详细说明了WechatUserImportServiceImpl.importWechatUsersToHrs()方法的业务流程和实现逻辑。该方法负责将企业微信用户数据同步导入到HR管理系统中&#xff0c;包括员工信息、工作信息和任职记录的创建与更新。 主要功能 数据同步…

告别传统SEO!拥抱下一代流量密码:生成式引擎优化(GEO)实战指南

前言&#xff1a;为什么你的“最佳实践”SEO正在失效&#xff1f;你是否发现&#xff0c;即使严格遵循了谷歌自2019年以来的所有“最佳实践”&#xff0c;你的技术博客或产品文档的流量依旧增长乏力&#xff0c;甚至不升反降&#xff1f;你不是一个人。问题在于&#xff0c;游戏…

week1-[一维数组]传送

week1-[一维数组]传送 题目描述 有 nnn 个传送门&#xff0c;从第 iii 个传送门进去后会被传送到第 aia_iai​ 个传送门&#xff0c;进而被传送到第 aaia_{a_i}aai​​ 个传送门&#xff0c;如此一直下去……小 A 想知道从第 kkk 个传送门进去后&#xff0c;能不能回到第 kkk 个…

【18】目心智能——目心智能 嵌入式一面 ,校招,面试问答记录

目心智能——目心智能 嵌入式一面 &#xff0c;校招&#xff0c;面试问答记录 1 简单自我介绍2 你做了这么多算法&#xff0c;为什么不找算法的&#xff1f;3 我们主要还是软件开发&#xff0c;不做结构设计4 模电知识6 CSDN应该附链接在简历上&#xff0c;稍后发给我&#xff…

C++第二十课:快递运费计算器 / 黑白配+石头剪刀布小游戏

快递运费计算器帮一家快递站点开发一个快递运费计算器&#xff0c;快递站点人员只需要输入包裹重量和地点编号即可计算出对应的运费。假设快递费计算规则如下&#xff1a;首重&#xff1a;3公斤 3公斤以内&#xff1a;1.东三省/宁夏/青海/海南&#xff1a;12元&#xff0c;2.新…