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

相关文章

Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题

《Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题》:本文主要介绍Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录一、前言二、系统架构检测三、卸载旧版 Go四、下载并安装正确版本五、配置环境变量六、验证安装七、常见

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

Java中的内部类和常用类用法解读

《Java中的内部类和常用类用法解读》:本文主要介绍Java中的内部类和常用类用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录内部类和常用类内部类成员内部类静态内部类局部内部类匿名内部类常用类Object类包装类String类StringBuffer和Stri

MySQL连接池(Pool)常用方法详解

《MySQL连接池(Pool)常用方法详解》本文详细介绍了MySQL连接池的常用方法,包括创建连接池、核心方法连接对象的方法、连接池管理方法以及事务处理,同时,还提供了最佳实践和性能提示,帮助开发者构... 目录mysql 连接池 (Pool) 常用方法详解1. 创建连接池2. 核心方法2.1 pool.q

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

JavaScript时间戳与时间的转化常用方法

《JavaScript时间戳与时间的转化常用方法》在JavaScript中,时间戳(Timestamp)通常指Unix时间戳,即从1970年1月1日00:00:00UTC到某个时间点经过的毫秒数,下面... 目录1. 获取当前时间戳2. 时间戳 → 时间对象3. 时间戳php → 格式化字符串4. 时间字符