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

03 go语言(golang) - fmt包基本类型

fmt包

在Go语言中,fmt 包是一个非常重要且广泛使用的标准库包,它提供了格式化I/O(输入/输出)功能,类似于C语言中的 printfscanf。通过这个包,你可以读取输入并将数据格式化输出到标准输出或其他写入器(writers)。

主要功能

  1. 打印

    • Print, Printf, Println: 这些函数用于向标准输出打印文本。其中,Printf 允许使用格式化字符串。
  2. 格式化

    • 格式化功能允许你控制数字、字符串等的显示方式。例如 %d 用于整数、%f 用于浮点数、%s 用于字符串等。
  3. 读取

    • Scan, Scanf, Scanln: 这些函数从标准输入读取,并根据需要解析输入的数据。
  4. 字符串处理

    • 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)
}

注意:

  1. fmt.Scanf
    • Scanf 函数使用格式字符串来解析输入,它需要一个格式字符串参数,后面跟着要填充的变量的地址。
    • 它从标准输入(通常是键盘)读取输入,直到遇到换行符或文件末尾。
    • Scanf 会根据格式字符串中的格式说明符来匹配和解析输入的值,并将它们赋给相应的变量。
  2. fmt.Scan
    • Scan 函数不需要格式字符串,它直接读取输入并将其赋值给提供的变量。
    • 它同样从标准输入读取,但它不会尝试根据格式字符串解析输入,而是简单地读取空白字符分隔的值。
    • Scan 在处理输入时不如 Scanf 那样灵活,因为它不会根据格式说明符来解析输入。
  3. 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语言提供了一系列的基本数据类型,这些类型可以分为几个主要类别:基本类型、复合类型、引用类型和接口类型。这里先展开基本类型

基本类型

  1. 布尔型:
    • bool:表示真或假,值为 truefalse
  2. 数字型:
    • 整数:
      • 有符号整型:int8, int16, int32, int64
      • 无符号整型:uint8, uint16, uint32, uint64
      • 特定长度整数:例如,byte(等同于uint8),rune(等同于int32)
      • 通用大小整数(根据操作系统决定大小):int, uint
      • 指针整数(指针后面再详细展开): uintptr
    • 浮点数:
      • 单精度浮点数: float32
      • 双精度浮点数: float64
    • 复数(少用):
      • 小复数: complex64(实部和虚部都是 float32)
      • 大复数: complex128(实部和虚部都是 float64)
  3. 字符串:
    • 字符串由字节序列组成,使用 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…...

Step3-VL-10B与Keil5开发环境:嵌入式视觉系统实战

Step3-VL-10B与Keil5开发环境&#xff1a;嵌入式视觉系统实战 用最简单的方式&#xff0c;带你从零搭建一个能"看懂世界"的嵌入式视觉系统 1. 开篇&#xff1a;为什么需要嵌入式视觉&#xff1f; 你有没有想过&#xff0c;让一个小小的单片机也能像人一样"看见…...

STC8H8K32U工控板 电机正反转

本文摘要&#xff1a; 该代码实现了一个基于STC8H单片机的自动化控制系统&#xff0c;主要功能包括&#xff1a; 通过I2C接口驱动OLED显示屏&#xff0c;显示&quot;气缸前进/后退&quot;、&quot;电机前进/停止&quot;等状态信息 控制4路气缸(前/后气缸的进/退)和…...

CSDN Markdown编辑教程

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...

2026知识付费SaaS平台实测对比:创客匠人综合首选,拆解行业标杆的硬核实力

随着知识付费市场规模持续扩张&#xff0c;艾媒咨询数据显示&#xff0c;2026年中国知识付费市场规模将突破3000亿元&#xff0c;用户规模超6.4亿人。面对激烈的竞争&#xff0c;如何选择一款功能全面、稳定可靠的SaaS平台成为内容创作者和机构的核心痛点。功能卡顿、获客成本高…...

别再只跑Demo了!手把手教你用YOLOv5/v8训练自己的钢材缺陷数据集并部署成Web服务

从零构建工业级钢材缺陷检测系统&#xff1a;YOLOv5/v8实战全流程指南 在工业质检领域&#xff0c;深度学习技术正在掀起一场革命。想象一下&#xff0c;当传统质检员需要花费数小时仔细检查钢材表面的每一寸区域时&#xff0c;一个训练有素的AI系统可以在几毫秒内完成同样的工…...

OpenClaw模型微调指南:千问3.5-35B-A3B-FP8适配专属任务

OpenClaw模型微调指南&#xff1a;千问3.5-35B-A3B-FP8适配专属任务 1. 为什么需要微调千问3.5模型&#xff1f; 当我第一次尝试用OpenClaw调用千问3.5-35B-A3B-FP8模型处理图片标注任务时&#xff0c;发现了一个尴尬的现象&#xff1a;这个视觉多模态模型虽然能准确识别常见…...

在WinForms里用OpenTK+SkiaSharp画个会动的波形图(.NET 8环境保姆级教程)

在WinForms里用OpenTKSkiaSharp画个会动的波形图&#xff08;.NET 8环境保姆级教程&#xff09; 最近在开发一个实时音频分析工具时&#xff0c;遇到了一个有趣的挑战&#xff1a;如何在Windows Forms应用中高效渲染动态波形图。经过多次尝试&#xff0c;我发现结合OpenTK的Ope…...

告别 Thread.stop():并发编程的最高礼仪——两阶段终止模式

告别 Thread.stop()&#xff1a;并发编程的最高礼仪——两阶段终止模式各位正在死磕并发编程的同学们&#xff0c;大家平时在学习多线程时&#xff0c;可能都看到过书上的一句警告&#xff1a;“千万不要使用 Thread.stop() 来停止线程&#xff0c;它是极其危险且已被废弃的”。…...

心电图深度学习分类技术突破:基于多特征融合的94.5%准确率解决方案

心电图深度学习分类技术突破&#xff1a;基于多特征融合的94.5%准确率解决方案 【免费下载链接】ecg-classification Code for training and test machine learning classifiers on MIT-BIH Arrhyhtmia database 项目地址: https://gitcode.com/gh_mirrors/ec/ecg-classifica…...

保姆级教程:在Ubuntu 20.04上用Gazebo 11从户型图到仿真世界(附避坑指南)

从户型图到高保真Gazebo仿真环境&#xff1a;零基础室内建模实战指南 刚拿到户型图时&#xff0c;你可能觉得在Gazebo里重建整个房屋是项艰巨任务——毕竟不是每个机器人开发者都精通3D建模。但事实上&#xff0c;用Gazebo 11的建筑编辑器&#xff0c;配合一张清晰的户型图照片…...