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.mzph.cn/news/882632.shtml

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

相关文章

web API基础

作用和分类 作用: 就是使用 JS 去操作 html 和浏览器 分类: DOM (文档对象模型)、 BOM (浏览器对象模型) 什么是DOM DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口。 HTML DOM 定义了访问和操作 …

Android SELinux——上下文Context介绍(九)

在 SELinux (Security-Enhanced Linux) 中,context(上下文)是一个非常重要的概念,它用于定义系统中的对象(如文件、目录、进程等)的安全属性。每个对象都有一个与之关联的安全上下文,这个上下文决定了对象可以执行的操作以及可以访问哪些其他对象。 一、Context介绍 前…

mingw64的Windows安装及配置教程gcc、g++等

mingw64.rar 链接:https://pan.baidu.com/s/18YrDRyi5NHtqnTwhJG6PuA 提取码:pbli (免费永久有效,免安装,解压后配置环境变量即可使用) 1 下载 解压后随便放到一个地方: 复制“bin”路径&am…

重磅:中国首个SVG技术标准发布,计育韬老师主笔起草

编辑搜图 中华人民共和国《融媒体 SVG 交互设计技术规范》是由复旦大学奇点新媒体研究中心等单位牵头,学科带头人计育韬等人主要起草,并于 2024 年 8 月起面向全社会行业从业者发布的最高技术标准。该标准前身为 2016 年计育韬与微信团队合作拟定的《SV…

置分辨率设置多显示器的时候提示, 某些设置由系统管理员进行管理

遇到的问题 设置分辨率设置多显示器的时候提示(如下图所示): 某些设置由系统管理员进行管理 解决方法 先试试这个方法: https://answers.microsoft.com/zh-hans/windows/forum/all/%E6%9B%B4%E6%94%B9%E5%88%86%E8%BE%A8%E7%8…

强大的Python必备库,你知道几个?建议收藏!

在Python的世界里,库的丰富性让开发者的工作变得轻松而高效。那么,你知道哪些强大的Python必备库吗? 面对众多的Python库,如何选择适合自己的工具来提升开发效率和代码质量?,丰富多样的库如同一个个强大的…

Java中的I/O系统中的字节流

## 一、简介 在Java的I/O体系中,节点流是直接与数据源或数据汇(目的地)相连的流。它们构成了数据传输的最底层操作,是构建更复杂的I/O操作的基础。理解节点流对于深入掌握Java的I/O系统至关重要。 ## 二、文件相关的节点流 ### …

AnaTraf | 提升网络性能:深入解析网络关键指标监控、TCP重传与TCP握手时间

AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具 在当今的数字化时代,网络的稳定性和性能对企业的运营效率至关重要。无论是内部通信、应用程序的运行,还是对外提供服务,网络都发挥着关键作用。对于网络工程师或IT运维人员…

【多类别分类中的准确率召回率平均策略】

文章目录 1. 机器学习中的微平均策略(Micro Average Strategy)2. 机器学习中的宏平均策略(Macro Average Strategy)3、weighted 平均策略 1. 机器学习中的微平均策略(Micro Average Strategy) 在机器学习和…

移动端面试问题笔记(一)

1. 1pxborder的问题 原因: 设备像素比不同 从移动端的角度说个具体的场景,以iphone6为例。 iphone6的屏幕宽度为375px,设计师做的视觉稿一般是750px,也就是2x,这个时候设计师在视觉稿上画了1px的边框,于是你就写了“bo…

EasyX图形库的安装

前言 EasyX是一个图形库,可以用来做一些c/c小游戏,帮助学习。 一、进入EasyX官网 https://easyx.cn/ 二、点击下载EasyX 三、下载好后以管理员身份运行它 四、点击下一步 五、然后它会自动检测你的编辑器,用哪个就在哪个点安装 六、安装成功…

【linux问题】Linux命令行终端窗口的输出,显示不全问题

Linux命令行终端窗口的输出,显示不全问题 问题: 图中显示的是一个Linux命令行终端窗口, nmcli dev wifi 是一个命令——列出所有能用的Wi-Fi。 执行命令后,窗口输出了显示了所有能用的Wi-Fi网络列表。 但是在每一行末尾有一个“…

KPaaS:基于微服务架构的低代码平台

基于微服务架构的低代码平台是当前企业数字化转型的重要工具。通过将微服务架构与低代码平台结合,可以实现高效、灵活且可扩展的应用开发。在当今数字化转型的浪潮中,企业面临着诸多挑战,其中IT资源有限以及对高效开发的需求尤为突出。KPaaS业…

AI一键生成钢铁是怎样炼成的ppt!用这2个工具轻松拿捏ppt制作!

钢铁是怎样炼成的,是中小学语文新课标必读书目,它是由前苏联作家尼古拉奥斯特洛夫斯基于1930年至1934年写成的半自传体长篇小说,全书详细记叙了保尔柯察金于20世纪初期的成长历程。 对于每个接受过九年义务教育的大小朋友来说,这…

漏洞挖掘JS构造新手向

前置思路文章 JS逆向混淆前端对抗 油猴JS逆向插件 JS加解密之mitmproxy工具联动Burp JS挖掘基础 伪协议 JavaScript伪协议是一种在浏览器中模拟网络请求的方法。它使用window.XMLHttpRequest对象或fetch()方法来模拟发送HTTP请求,而不是通过实际的网络请求来获…

碰到这个问题请更新或重新安装fastapi版本

ValueError: too many values to unpack (expected 2) ERROR: Exception in ASGI application Traceback (most recent call last) File "/usr/local/lib/python3.8/site-packages… Ubuntu,容器中, 碰到上面这个问题,请更新fastapi的版…

微信小程序——编写一个表白墙小程序

一、前期准备 注册微信小程序账号 在微信公众平台上注册小程序账号,获取小程序的 AppID。 安装开发工具 下载并安装微信开发者工具,用于小程序的开发、调试和预览。 二、界面设计 首页 展示最新的表白内容列表,每条表白可以包括发布者昵称、…

⌈ 传知代码 ⌋ 无监督动画中关节动画的运动表示

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

前端响应式布局

1.什么是响应式布局? 响应式布局是一种使网页在不同设备(如手机、平板和桌面)上均能良好显示的设计理念。 2.响应式布局的原理? 通过灵活的网格布局、CSS 媒体查询和弹性单位等技术,实现内容自适应屏幕尺寸变化。 3.响…

Spring 的三级缓存机制

Spring 在处理 循环依赖 时使用了 三级缓存机制,这是 Singleton Bean 创建过程中为了解决循环依赖的一种策略。通过三级缓存,Spring 可以提前暴露未完全初始化的对象,避免循环依赖导致的无限递归错误。 1. 三级缓存的结构 Spring IOC 容器的…