当前位置: 首页 > 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…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...