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

相关文章

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1