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)

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

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

相关文章

数据结构——笛卡尔树详解

数据结构——笛卡尔树 1,笛卡尔树的介绍2,笛卡尔树的构建3,笛卡尔树的代码实现 1,笛卡尔树的介绍 前面我们讲过《堆》和《二叉搜索树》,能不能把这两种数据结构的特性结合起来构造一棵新的树呢?当然是可以…

Qt-界面优化控件样式设置(72)

目录 描述 QPushButton 自定义复选框 输入框 列表框 菜单 实现登入界面 设置背景图 改变样式表 描述 这里介绍一些控件的样式设置 QPushButton 相关属性 font-size设置⽂字⼤⼩.border-radius设置圆⻆矩形. 数值设置的越⼤, ⻆就 "越圆".background-colo…

离散数学 第二讲 特殊集合和集合间关系 笔记 [电子科大]王丽杰

1.2 特殊集合与集合间关系 空集 不含任何元素的集合叫做空集(empty set),记作∅. 空集可以符号化为 ∅ { x ∣ x ≠ x } ∅ \{ x|x ≠ x\} ∅{x∣xx} . 空集是绝对唯一的。 全集 针对一个具体范围,我们考虑的所有对象的集合叫做全集(universal se…

vulnhub-Kioptrix4靶机的测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 udf提权 四、结论 一、测试环境 1、系统环境 渗透机:kali2021.1(192.168.202.134) 靶 机:Linux 2.6.24 2、使用工具/软件 …

Oracle分布式数据库的安装遇到的问题【已解决】:找不到scott用户、出现【INS-30014】错误、oracle登录适配器错误

Oracle分布式数据库的安装遇到的问题【已解决】:找不到scott用户、出现【INS-30014】错误、oracle登录适配器错误 安装oracle19c软件利用Database Configuration Assistant,创建orcl数据库第一步:在开始菜单找到Oracle,点击“Data…

SpringColoud GateWay 核心组件

优质博文:IT-BLOG-CN 【1】Route路由: Gateway的基本构建模块,它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由。 Route路由-动态路由实现原理: 配置变化Apollo 服务地址实例变化…

Axure使用echarts详细教程

本次使用的axure版本为rp9,下面是效果图。 接下来是详细步骤 【步骤1】在axure上拖一个矩形进来,命名为myChart(这个根据实际情况来,和后面的代码对应就好) 【步骤2】 点击交互->选择加载时->选择打开链接->链接外部地址 点击fx这个符号 【步骤3】在弹…

前端学习笔记(1.0)

在开发项目时,需要使用符号来代替书写./和../等麻烦的路径书写,所以就遇到了下面的问题。 输入没有路径提示 我们都知道,设置是通过配置vite等脚手架工具的配置文件,设置别名即可。 但是如果需要在使用的时候需要出现路径提示&…

虚拟滚动列表如何实现?

highlight: a11y-dark 虚拟滚动列表&#xff0c;虚拟滚动的关键在于只渲染当前视口内可见的数据项&#xff0c;而不是一次性渲染所有数据项。这可以显著提高性能&#xff0c;尤其是在处理大量数据时。 以下是一个完整的虚拟滚动列表的示例代码&#xff1a; <!DOCTYPE htm…

React高级Hook

useReducer useReducer 是 React 提供的一个 Hook&#xff0c;用于在函数组件中使用 reducer 函数来管理组件的 state。它类似于 Redux 中的 reducer&#xff0c;但仅用于组件内部的状态管理。useReducer 可以使复杂的状态逻辑更加清晰和可维护。 基本用法 useReducer 接收…

1.前提配置 关防火墙 关selinux

1.前提配置 关防火墙 关selinux 2.安装web服务程序nginx 未安装则需重新设置挂载点 若已安装&#xff0c;则查看系统中是否存在 3.当前主机添加多地址&#xff08;ip a&#xff09; 配置了三个IP地址 查看IP地址是否配置成功 4.自定义nginx配置文件通过多地址区分多网站 /…

使用JMeter进行Spring Boot接口的压力测试

使用 Apache JMeter 对接口进行压力测试是一个相对简单的过程。以下是详细的步骤&#xff0c;包括安装、配置和执行测试计划。 1. 下载和安装 JMeter 下载 JMeter 从 JMeter 官方网站https://jmeter.apache.org/download_jmeter.cgi 下载最新版本的 JMeter。 解压缩 将下载的 …

02.数据结构介绍顺序表、链表简述+对比

目录 一、什么是数据结构 二、线性表 三、顺序表 四、链表 五、顺序表和链表的区别 一、什么是数据结构 数据结构是由“数据”和“结构”两个词组合而来。 数据&#xff1a;常见的数值1、2、3......&#xff0c;网页里的文字图片信息等都是数据。 结构&#xff1a;组织数据…

【从零开始的LeetCode-算法】3184. 构成整天的下标对数目 I

给你一个整数数组 hours&#xff0c;表示以 小时 为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 整天 的下标对 i, j 的数目。 整天 定义为时间持续时间是 24 小时的 整数倍 。 例如&#xff0c;1 天是 24 小时&#xff0c…

leetcode动态规划(九)-0-1背包理论基础

题目 背包问题主要有以下几种分类&#xff0c;对于面试来说掌握0-1背包和完全背包足够&#xff0c;多重背包和分组背包是竞赛级别的题目&#xff0c;面试就无需准备 题目&#xff1a; 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价…

C# SM2 加签、验签工具

目录 效果 项目 代码 下载 效果 项目 代码 using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Crypto.Signers; using Org.BouncyCastle.Asn1.GM; using System; using System.Text; using System.Windows.Forms; using Org.BouncyCastle.Asn1.X9; using…

element plus e-table表格中使用多选,当翻页时已选中的数据丢失

摘要&#xff1a; 点击第一页选中两个&#xff0c;再选择第二页&#xff0c;选中&#xff0c;回到第一页&#xff0c;之前选中的要保留&#xff01; element ui table 解决办法&#xff1a; :row-key“getRowKeys” &#xff08;写在el-table中&#xff09; methods中声明 ge…

Spring Boot项目中怎么设置内容安全策略Content Security Policy

内容安全策略&#xff08;CSP&#xff0c;Content Security Policy&#xff09; 是一种用于防止跨站点脚本攻击&#xff08;XSS&#xff09;和数据注入攻击的安全策略。它通过指定允许加载的资源类型&#xff08;如脚本、样式表、图像等&#xff09;和其来源&#xff0c;来减少…

Python爬虫之小白入门保姆级教程,带7个爬虫小案例(附源码)!

以下是一份 Python 爬虫入门保姆级教程&#xff1a; 一、准备工作 安装 Python 前往 Python 官方网站&#xff08;https://www.python.org/&#xff09;下载适合你操作系统的 Python 版本并安装。安装过程中可以勾选“Add Python to PATH”以便在命令行中方便地调用 Python。 …

初识git · 有关模型

目录 前言&#xff1a; 有关开发模型 前言&#xff1a; 其实文章更新到这里的时候&#xff0c;我们已经学习了可以满足我们日常生活中的基本需求的指令了&#xff0c;但是为什么要更新本篇文章呢&#xff1f;是因为实际生活中我们对于开发工作&#xff0c;运维工作&#xff…