03 go语言(golang) - fmt包基本类型
fmt包
在Go语言中,fmt
包是一个非常重要且广泛使用的标准库包,它提供了格式化I/O(输入/输出)功能,类似于C语言中的 printf
和 scanf
。通过这个包,你可以读取输入并将数据格式化输出到标准输出或其他写入器(writers)。
主要功能
-
打印:
Print
,Printf
,Println
: 这些函数用于向标准输出打印文本。其中,Printf
允许使用格式化字符串。
-
格式化:
- 格式化功能允许你控制数字、字符串等的显示方式。例如
%d
用于整数、%f
用于浮点数、%s
用于字符串等。
- 格式化功能允许你控制数字、字符串等的显示方式。例如
-
读取:
Scan
,Scanf
,Scanln
: 这些函数从标准输入读取,并根据需要解析输入的数据。
-
字符串处理:
Sprint
,Sprintf
,Sprintln
: 这些函数不会向标准输出打印,而是返回一个格式化后的字符串。- 类似地,还有对应的错误处理版本如:Fprint系列可以将内容打印到任何实现了io.Writer接口的对象。
使用示例
输出
package mainimport "fmt"func main() {print("内置输出")println("换行输出")fmt.Println("--------------------")fmt.Print("fmt输出")fmt.Println("换行输出")fmt.Printf("这是占位符【%s】\n", "ok")fmt.Printf("这是占位符【%d】\n", 123)fmt.Printf("这是占位符【%f】\n", 123.456)fmt.Printf("这是占位符【%.2f】\n", 123.456) // 保留两位,四舍五入// 格式化输出name := "小明"age := 30height := 1.8fmt.Printf("名字: %s, 年龄: %d, 身高: %.2f米\n", name, age, height)}
输入
package mainimport "fmt"func main() {var name stringvar age intfmt.Print("请输入你的名字和年龄(空格或者换行隔开): ")fmt.Scan(&name, &age)fmt.Printf("Name: 【%s】, Age: 【%d】\n", name, age)var a stringvar b intvar c float64fmt.Println("请输入字符串、整数、小数,用空格隔开:")fmt.Scanf("%s %d %f", &a, &b, &c) // 可以理解为输入的值会先放在第一个参数的位置,再解析出a\b\c三个值fmt.Printf("a: 【%s】, b: 【%d】, c: 【%f】\n", a, b, c)
}
注意:
fmt.Scanf
:Scanf
函数使用格式字符串来解析输入,它需要一个格式字符串参数,后面跟着要填充的变量的地址。- 它从标准输入(通常是键盘)读取输入,直到遇到换行符或文件末尾。
Scanf
会根据格式字符串中的格式说明符来匹配和解析输入的值,并将它们赋给相应的变量。
fmt.Scan
:Scan
函数不需要格式字符串,它直接读取输入并将其赋值给提供的变量。- 它同样从标准输入读取,但它不会尝试根据格式字符串解析输入,而是简单地读取空白字符分隔的值。
Scan
在处理输入时不如Scanf
那样灵活,因为它不会根据格式说明符来解析输入。
- scan相关的方法使用,goland会提醒Unhandled error,这是因为我们代码没有做好异常的控制处理,后期再详细学习异常(错误)处理相关的知识
输入扩展
package mainimport "fmt"func main() {var name stringvar age intfmt.Println("请输入个人信息:")count, _ := fmt.Scanf("我叫%s,今年%d岁", &name, &age)fmt.Println("输出结果:")fmt.Println(name)fmt.Println(age)fmt.Println(count)
}
结果:
请输入个人信息:
我叫aa,今年19岁
输出结果:
aa,今年19岁
0
原因是name和age之间使用逗号,识别的时候会连着 ,今年%d岁
都赋值给了name
改进:官方推荐使用空格隔开
package mainimport "fmt"func main() {var name stringvar age intfmt.Println("请输入个人信息:")//fmt.Scanf("我叫%s,今年%d岁", &name, &age) // 会连着 `,今年%d岁` 都赋值给了namefmt.Scanf("我叫%s 今年%d岁", &name, &age) // 官方推荐使用空格隔开fmt.Println("输出结果:")fmt.Println(name)fmt.Println(age)
}
输出:
请输入个人信息:
我叫aa 今年19岁
输出结果:
aa
19
常见格式说明符
%v
: 默认方式表示变量值。%+v
: 当输出结构体时,默认添加字段名。%#v
: 输出值的Go语法表示方式。%T
: 输出值类型。%d
: 整型格式显示。%s
: 字符串显示。%f
: 浮点数显示。
数据类型
Go语言提供了一系列的基本数据类型,这些类型可以分为几个主要类别:基本类型、复合类型、引用类型和接口类型。这里先展开基本类型
基本类型
- 布尔型:
bool
:表示真或假,值为true
或false
。
- 数字型:
- 整数:
- 有符号整型:
int8
,int16
,int32
,int64
- 无符号整型:
uint8
,uint16
,uint32
,uint64
- 特定长度整数:例如,
byte
(等同于uint8
),rune
(等同于int32
) - 通用大小整数(根据操作系统决定大小):
int
,uint
- 指针整数(指针后面再详细展开):
uintptr
- 有符号整型:
- 浮点数:
- 单精度浮点数:
float32
- 双精度浮点数:
float64
- 单精度浮点数:
- 复数(少用):
- 小复数:
complex64
(实部和虚部都是 float32) - 大复数:
complex128
(实部和虚部都是 float64)
- 小复数:
- 整数:
- 字符串:
- 字符串由字节序列组成,使用 UTF-8 编码表示 Unicode 文本。
注意:
int
类型的长度取决于你的计算机系统架构:
- 在 32位 系统上,
int
通常是 32位 。 - 在 64位 系统上,
int
通常是 64位 。
查看我的int是多少位:
package mainimport ("fmt""strconv"
)func main() {fmt.Printf("我的系统中int是 %d 位\n", strconv.IntSize)
}
示例
package mainimport ("fmt""strconv"
)func main() {fmt.Printf("我的系统中int是 %d 位\n", strconv.IntSize)// 布尔型var isActive bool = false// 整形var int1 int = 123 // 32 位系统中:-2147483648 到 2147483647,64 位系统中:-9223372036854775808 到 9223372036854775807var int2 int8 = -128 // -128 到 127var int3 int16 = 32767 // -32768 到 32767var int4 int32 = 2147483647 // -2147483648 到 2147483647var int5 int64 = 9223372036854775807 // -9223372036854775808 到 9223372036854775807var int6 uint = 18446744073709551615 // 32 位系统中 :0 到 4294967295 ,64 位系统中:0 到 18446744073709551615// 浮点型var float float64 = 3.5// 字符串var str1 string = "\n啊啊啊"var str2 string = `\n啊啊啊`fmt.Println(isActive)fmt.Println(int1, int2, int3, int4, int5, int6)fmt.Println(float)fmt.Println(str1)fmt.Println(str2)
}
字符串的定义
字符串可以用双引号 ("
) 或反引号 (`
) 来定义。它们之间有一些重要的区别:
使用双引号 ("
)
- 双引号用于定义常规的字符串。
- 支持转义序列。例如,
\n
代表换行符,\t
代表制表符等。 - 必须在同一行结束。
使用反引号 (`
)
- 反引号用于定义原生的字符串字面量(raw string literals),其中所有的字符都是直接按照字面意思解释,不进行转义。
- 可以跨多行书写而不需要特殊的换行符。
- 常用于编写多行文本、嵌入JSON、HTML或正则表达式等场景。
如果你需要在字符串中包含特殊字符或转义序列,并且希望它们被解释和处理,则应该使用双引号。如果你希望保留原始格式,并且不想处理任何转义逻辑,则使用反引号会更合适。
示例
package mainimport "fmt"func main() {str1 := "字符串1\n字符串1"str2 := `字符串2\n字符串2
字符串2`fmt.Println(str1)fmt.Println(str2)
}
特别
如果我用 `
定义的字符串中,要使用 `
这个符号怎么办,会遇到一个问题,因为反引号内部不能直接包含反引号。
方法1: 使用双引号和转义
如果你需要在文本中包含反引号字符,可以考虑将整个字符串或字符串的那一部分改用双引号,并使用转义序列。例如:
s1 := "输出`反引号"fmt.Println(s1)
方法2: 拼接字符串
另一种方法是将原生字符串分成几部分,并用加号 (+
) 将它们连接起来,在需要插入反引号的地方切换到双引号定义的字符串:
s2 := `输出` + "`" + `反引号`fmt.Println(s2)
相关文章:
03 go语言(golang) - fmt包基本类型
fmt包 在Go语言中,fmt 包是一个非常重要且广泛使用的标准库包,它提供了格式化I/O(输入/输出)功能,类似于C语言中的 printf 和 scanf。通过这个包,你可以读取输入并将数据格式化输出到标准输出或其他写入器…...

Docker本地镜像发布到阿里云镜像服务的简易指南
1 阿里云容器镜像服务 阿里云容器镜像服务(Alibaba Cloud Container Registry,简称ACR)是一个为容器镜像、Helm Chart等云原生资产提供安全托管及高效分发的平台。它支持多架构容器镜像,包括Linux、Windows、ARM等,以…...
大数据学习---快速了解clickhouse数据库
ClickHouse数据库介绍 ClickHouse是一款由Yandex开发的列式数据库管理系统(DBMS),适用于在线分析处理(OLAP)场景。它具有高性能、可扩展性、实时更新等特点,适用于处理大规模数据。 特点 列式存储&#x…...

哪些方法可以缓解面试紧张?
面试紧张是许多人在面对重要职业机会时的一种常见情绪。虽然一定程度的紧张可能激发人的潜能,但过度的紧张则可能影响到面试表现。为了缓解面试紧张,以下是一些有效的方法: 1.充分准备: 深入了解公司背景、职位要求以及公司文化…...

即时通讯未读消息计数
单聊未读消息计数 未读消息的计数,分为两个部分:增加和减少 其中,未读消息计数的增加,是由数据库(redis)在写入消息的同时,增加对应接收方的未读消息计数 在线 用户在线时,客户端…...

在Openshift(K8S)上通过EMQX Operator部署Emqx集群
EMQX Operator 简介 EMQX Broker/Enterprise 是一个云原生的 MQTT 消息中间件。 我们提供了 EMQX Kubernetes Operator 来帮助您在 Kubernetes 的环境上快速创建和管理 EMQX Broker/Enterprise 集群。 它可以大大简化部署和管理 EMQX 集群的流程,对于管理和配置的知…...

Python酷玩之旅_数据分析入门(matplotlib)
导览 前言matplotlib入门1. 简介1.1 Pairwise data1.2 Statistical distributions1.3 Gridded data1.4 Irregularly gridded data1.5 3D and volumetric data 2. 实践2.1 安装2.2 示例 结语系列回顾 前言 翻看日历,今年的日子已划到了2024年10月19日,今天…...

uiautomatorviewer安卓9以上正常使用及问题处理
一、安卓9以上使用uiautomatorviewer问题现象 打开Unexpected error while obtaining UI hierarchy 问题详情 Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException 二、问题处理 需要的是替换对应D:\software\android-sdk-windows…...

Go语言gRPC快速入门
文章目录 前言gRPC是什么Go语言的gRPC技术栈准备工作接口定义代码生成服务端代码编写客户端代码编写效果演示完整代码链接最后 前言 你好,我是醉墨居士,这篇博客想帮助初学者能够快速入门gRPC,希望能够为你节省宝贵的时间,让时间…...

Golang | Leetcode Golang题解之第479题最大回文数乘积
题目: 题解: func largestPalindrome(n int) int {if n 1 {return 9}upper : int(math.Pow10(n)) - 1for left : upper; ; left-- { // 枚举回文数的左半部分p : leftfor x : left; x > 0; x / 10 {p p*10 x%10 // 翻转左半部分到其自身末尾&…...

UDP协议讲解
预备知识: 端口号port: 我们在正常网络通信时,实际上是进程在互相通信。 我们所有的网络通信的行为,本质上都是进程间通信。 对双方而言,1.先保证数据能到达自己的机器 ip解决 2.找到指定的进程 端口号 ip地址用来…...

交叉注意力融合时域、频域特征的FFT + CNN -BiLSTM-CrossAttention轴承故障识别模型
往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…...

CSDN Markdown 编辑器语法大全
Markdown 是一种轻量级标记语言,它以简洁、易读易写的特点,被广泛应用于技术文档、博客文章、笔记等领域。CSDN 的 Markdown 编辑器为用户提供了丰富的功能,让用户能够轻松地创建格式规范、内容丰富的文档。以下是一份详细的 CSDN Markdown 编…...
TCP/IP 协议【四次挥手】简要说明
四次挥手是为了确保数据的完整性和可靠性,解决的主要问题是双方在断开连接时,可能还有未完成传输的数据或者未被接收的数据。 具体来说,四次挥手解决的问题是: 第一次挥手(发送方向接收方发送FIN包)&#…...

第11篇:网络安全协议
目录 引言 11.1 安全套接字层(SSL)和传输层安全(TLS)协议 11.1.1 SSL/TLS 的工作原理 11.1.2 SSL/TLS 的应用场景 11.2 虚拟专用网(VPN)和 IP 安全协议(IPSec) 11.2.1 VPN 的工…...

ES-入门-javaApi-文档-新增-删除
新增指定索引的文档数据的代码如下: package com.atgulgu.es.test;import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.http.HttpHost; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexRe…...

【视频生成大模型】 视频生成大模型 THUDM/CogVideoX-2b
【视频生成大模型】 视频生成大模型 THUDM/CogVideoX-2b CogVideoX-2b 模型介绍发布时间模型测试生成的demo视频生成视频限制 运行环境安装运行模型下载开源协议参考 CogVideoX-2b 模型介绍 CogVideoX是 清影 同源的开源版本视频生成模型。 基础信息: 发布时间 2…...

【MR开发】在Pico设备上接入MRTK3(三)——在Unity中运行MRTK示例
在前面的文档中,介绍了如何在Unity工程中配置号MRTK和Pico SDK 【MR开发】在Pico设备上接入MRTK3(一)在Unity中导入MRTK3依赖【MR开发】在Pico设备上接入MRTK3(二)在Unity中配置Pico SDK 本文将介绍如何运行一个简单…...
C#中委托的应用与示例
委托 委托是指把事情托付给别人或别的机构办理。在C#语言中委托是一种特殊类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。委托是具有特定参数列表和返回类型的方法的引用的类型(不是引用对象,而是引用方法)。 可以委托将看作一个包含有序方法列表…...

算法: 模拟题目练习
文章目录 模拟替换所有的问号提莫攻击Z 字形变换外观数列数青蛙 总结 模拟 替换所有的问号 按照题目的要求写代码即可~ public String modifyString(String ss) {int n ss.length();if (n 1) {return "a";}char[] s ss.toCharArray();for (int i 0; i < n; i…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用
阻止除自定义标签之外的所有标签 先输入一些标签测试,说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时(如通过点击或键盘导航&…...

EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...