Go常用的标准库——fmt,time

2024-04-30 10:44
文章标签 go 常用 fmt 标准 time

本文主要是介绍Go常用的标准库——fmt,time,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.fmt

        fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。

        1.1 向外输出

        标准库fmt提供了以下几种输出相关函数。

  • Print

        Print系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,没有换行符,Printf函数支持格式化输出字符串,Println函数会在输出内容的结尾添加一个换行符。

func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)

        举个简单的例子:

  • Fprint

        Fprint系列函数会将内容输出到一个io.Writer接口类型的变量w中,我们通常用这个函数往文件中写入内容。

func Fprint(w io.Writer, a ...any) (n int, err error)
func Fprintf(w io.Writer, format string, a ...any) (n int, err error) 
func Fprintln(w io.Writer, a ...any) (n int, err error) 

        举个例子: 

         注意:只要满足io.Writer接口的类型都支持写入。

  • Sprint

        Sprint系列函数会把传入的数据生成并返回一个字符串。

func Sprint(a ...any) string
func Sprintf(format string, a ...any) string
func Sprintln(a ...any) string 

  • Errorf

        Errorf函数根据format参数生成格式化字符串并返回一个包含该字符串的错误。

func Errorf(format string, a ...any) error 

        通常使用这种方式来自定义错误类型:

        1.2 格式化占位符

        *printf 系列函数都支持format格式化参数,在这里我们按照占位符将被替换的变量类型划分,方便查询和记忆。

  • 通用占位符

  •  布尔型

  • 整形

  • 浮点数和复数

  • 字符串和[]byte

  •  指针

  • 宽度标识符 

         宽度通过一个紧跟在百分号后面的十进制数指定,如果未指定宽度,则表示值是处必须之外不作填充。精度通过(可选的)宽度后跟点号后跟十进制数指定。如果未指定精度,会使用默认精度如果点号后没有跟数字,表示精度为0。

        宽度的意思就是长度。

  • 其它flag 

        1.3 获取输入 

         Go语言fmt包下有fmt.Scan,fmt.Scanf,fmt.Scanln三个函数,可以在程序运行过程中从标准输入获取用户输入。

  • fmt.Scan

        函数签名如下:

func Scan(a ...any) (n int, err error)
  • Scan从标准输入扫描文本,读取由空白符分隔的值保存到传递本函数的参数中,换行符视为空白符。
  • 本函数返回成功扫描的数据个数遇到任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。

示例:

        fmt.Scan从标准输入中扫描用户输入的数据,将空白符分隔的数据分别存入指定参数。

  •  fmt.Scanf

        函数签名如下:

func Scanf(format string, a ...any) (n int, err error)
  • Scanf从标准输入扫描文本,根据format参数指定的格式取读取由空白符分隔的值保存到传递给本函数的参数中。
  • 本函数返回成功扫描的数据个数和遇到任何错误。

        fmt.Scanf不同于fmt.Scan简单的以空格作为输入数据的空格符,fmt.Scanf为输入数据指定了具体输入内容格式,只有按照格式输入数据才会被扫描并存入对应变量。

  • fmt.Scanln 

        函数签名如下:

func Scanln(a ...any) (n int, err error)
  • Scanln类似Scan,它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
  • 本函数返回成功扫描的数据个数和遇到任何错误。

  • bufio.NewReader

         有时候我们想完整获取输入的内容,而输入的内容可能包含空格,这种情况可以使用bufio包来实现。

        scan系列函数会把空格符作为分隔符,不会读上来。

  • Fscan系列

        这几个功能分别类似于fmt.Scan,fmt.Scanf,fmt.Scanln三个函数,只不过它们不是从标准输入中读取数据而是从io.Reader中读取数据。

func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
  • Sscan系列

         这几个函数的功能分别类似于fmt.Scan,fmt.Scanf,fmt.Scanln三个函数,只不过他们不是从标准输入中读取数据而是从指定字符串中读取数据。

func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)

 二. Time包

        time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。

        2.1 时间类型

        time.Time 类表示时间。我们可以使用time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。

        2.2 时间戳

        时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被成为Unix时间戳(UnixTimestamp)。

         基于时间对象获取时间戳的示例代码如下:

        使用time.Unix()函数可以将时间戳转为时间格式。

        2.3 时间间隔

        time.Duration是time包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。

        time.Duration表示一段时间间隔,可表示的最长时间段大约290年。

        time包中定义的时间间隔类型的常量如下:

        例如:time.Duration表示1纳秒,time.Second表示1秒。

        2.4 时间操作

  • Add

        我们在日常的编码过程中可能会遇到要求时间+时间间隔的需求,Go语言的时间对象有提供Add方法:

func (t Time) Add(d Duration) Time

        举个例子,求一个小时后的时间:

  • Sub

        求两个时间之间的差值。

func (t Time) Sub(u Time) Duration

        返回一个时间段t-u。如果结果超出了Duration可以表示的最大值/最小值,将返回最大值/最小值。要获取时间点t-d(d为Duration),可以使用t.Add(-d)。

  •  Equal

  •  Before

  • After

         2.5 定时器

        使用time.Tick(时间间隔)来设置定时器,定时器本质上是一个通道(channel)。

         2.6 时间格式化

        时间格式化输出,时间类型有一个自带的方法Format进行格式化,需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用Go的诞生时间2006年1月2号15点04分(记忆口诀为2006 1 2 3 4)。

        补充:如果想格式化为12小时方式,需要指定PM。

  • 解析字符串格式的时间 

 

这篇关于Go常用的标准库——fmt,time的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948655

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

C 标准库 - `<float.h>`

C 标准库 - <float.h> 概述 <float.h> 是 C 标准库中的一个头文件,它定义了与浮点数类型相关的宏。这些宏提供了关于浮点数的属性信息,如精度、最小和最大值、以及舍入误差等。这个头文件对于需要精确控制浮点数行为的程序非常有用,尤其是在数值计算和科学计算领域。 主要宏 <float.h> 中定义了许多宏,下面列举了一些主要的宏: FLT_RADIX:定义了浮点数的基数。