导航网站开发,百度竞价推广托管,哈尔滨做网站电话,营销广告网站Go 常用标准库之 fmt 介绍与基本使用 文章目录 Go 常用标准库之 fmt 介绍与基本使用一、介绍二、向外输出2.1 Print 系列2.2 Fprint 系列2.3 Sprint 系列2.4 Errorf 系列 三、格式化占位符3.1 通用占位符3.2 布尔型3.3 整型3.4 浮点数与复数3.5 字符串和[]byte3.6 指针3.7 宽度…Go 常用标准库之 fmt 介绍与基本使用 文章目录 Go 常用标准库之 fmt 介绍与基本使用一、介绍二、向外输出2.1 Print 系列2.2 Fprint 系列2.3 Sprint 系列2.4 Errorf 系列 三、格式化占位符3.1 通用占位符3.2 布尔型3.3 整型3.4 浮点数与复数3.5 字符串和[]byte3.6 指针3.7 宽度标识符3.8 其他flag 四、获取输入4.1 fmt.Scan 函数4.2 fmt.Scanln 函数4.3 fmt.Scanf 函数4.4 使用 bufio 包获取输入4.5 使用 Fscan 系列函数4.6 使用 Sscan 系列函数 一、介绍
fmt 是 Go 语言中的一个常用标准库它用于格式化输入和输出数据。fmt 包提供了一系列函数可以帮助你将数据以特定的格式打印到标准输出通常是终端或将数据格式化为字符串以供后续处理。这个库的名称 “fmt” 来自于 “format”因为它主要用于格式化数据。
fmt 包的主要功能包括
格式化输出fmt 包提供了函数如 Print, Printf, Println, Fprint, Fprintf, 和 Fprintln 用于将数据输出到标准输出或指定的 io.Writer。你可以使用这些函数将数据以不同的格式打印到屏幕上或文件中。格式化输入fmt 包也支持从输入源通常是标准输入读取数据并根据格式规范解析数据。这是通过 Scan, Scanf, 和 Scanln 函数实现的。这对于从用户获取输入数据非常有用。字符串格式化你可以使用 Sprintf 函数将数据格式化为字符串而不是直接输出到标准输出这对于构建日志消息或其他需要格式化的字符串很有用。错误格式化fmt 包也提供了 Errorf 函数用于将格式化的错误消息作为 error 类型返回方便错误处理。格式化占位符在格式化字符串中你可以使用占位符来指定如何格式化数据。常见的占位符包括 %d整数%f浮点数%s字符串等。
二、向外输出
标准库 fmt 提供了多种用于输出的函数每个函数都有不同的用途和输出方式。以下是一些常用的输出相关函数
2.1 Print 系列
Print用于将文本输出到标准输出。它接受任意数量的参数并将它们串联成一个字符串输出不会添加换行符。Printf用于格式化输出到标准输出。它接受一个格式化字符串和一系列参数根据格式化字符串的占位符将参数格式化并输出。Println类似于 Print但会在输出后自动添加一个换行符。
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)举个简单的例子
func main() {fmt.Print(Hello, , world)name : Aliceage : 30fmt.Printf(Hello, %s. You are %d years old.\n, name, age)fmt.Println(Hello, world)
}2.2 Fprint 系列
Fprint 系列函数用于将文本输出到指定的 io.Writer 接口而不仅仅是标准输出。你可以将文本输出到文件、网络连接等。这些函数的参数列表包括一个 io.Writer 参数以及任意数量的参数。
Fprint将文本输出到指定的 io.Writer。Fprintf将格式化文本输出到指定的 io.Writer。Fprintln将带有换行符的文本输出到指定的 io.Writer。
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)举个例子
func main() {// 向标准输出写入内容fmt.Fprintln(os.Stdout, 向标准输出写入内容)fileObj, err : os.OpenFile(./output.txt, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)if err ! nil {fmt.Println(打开文件出错err:, err)return}name : jarvis// 向打开的文件句柄中写入内容fmt.Fprintf(fileObj, 往文件中写如信息%s, name)
}这个示例创建了一个名为 “output.txt” 的文件并将数据写入文件中。
2.3 Sprint 系列
Sprint 系列函数用于将文本输出到字符串中而不是标准输出或文件。它们将文本格式化为字符串并返回结果。
Sprint将文本输出到字符串。Sprintf将格式化文本输出到字符串。Sprintln将带有换行符的文本输出到字符串。
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string简单的示例代码如下
func main() {s1 : fmt.Sprint(jarvis)name : jarvisage : 18s2 : fmt.Sprintf(name:%s,age:%d, name, age)s3 : fmt.Sprintln(jarvis)fmt.Println(s1, s2, s3)
}2.4 Errorf 系列
Errorf 系列函数用于创建格式化的错误消息并返回一个 error 类型的值。这允许你将格式化的错误消息返回给调用者以便更好地进行错误处理。这些函数的用法类似于 Sprintf但它们返回一个 error 值而不是字符串。
Errorf根据format参数生成格式化字符串并返回一个包含该字符串的错误。
func Errorf(format string, a ...interface{}) error通常使用这种方式来自定义错误类型例如
err : fmt.Errorf(这是一个错误)三、格式化占位符
*printf系列函数都支持format格式化参数在这里我们按照占位符将被替换的变量类型划分方便查询和记忆。
3.1 通用占位符
通用占位符用于格式化不同类型的数据
占位符说明%v值的默认格式表示%v类似%v但输出结构体时会添加字段名%#v值的Go语法表示%T打印值的类型%%百分号
代码示例
func main() {fmt.Printf(%v\n, 100)fmt.Printf(%v\n, false)o : struct{ name string }{jarvis}fmt.Printf(%v\n, o)fmt.Printf(%#v\n, o)fmt.Printf(%T\n, o)fmt.Printf(100%%\n)
}3.2 布尔型
占位符说明%ttrue或false
3.3 整型
占位符说明%b表示为二进制%c该值对应的unicode码值%d表示为十进制%o表示为八进制%x表示为十六进制使用a-f%X表示为十六进制使用A-F%U表示为Unicode格式U1234等价于U%04X%q该值对应的单引号括起来的go语法字符字面值必要时会采用安全的转义表示
示例代码如下
n : 65
fmt.Printf(%b\n, n)
fmt.Printf(%c\n, n)
fmt.Printf(%d\n, n)
fmt.Printf(%o\n, n)
fmt.Printf(%x\n, n)
fmt.Printf(%X\n, n)3.4 浮点数与复数
占位符说明%b无小数部分、二进制指数的科学计数法如-123456p-78%e科学计数法如-1234.456e78%E科学计数法如-1234.456E78%f有小数部分但无指数部分如123.456%F等价于%f%g根据实际情况采用%e或%f格式以获得更简洁、准确的输出%G根据实际情况采用%E或%F格式以获得更简洁、准确的输出
示例代码如下
f : 12.34
fmt.Printf(%b\n, f)
fmt.Printf(%e\n, f)
fmt.Printf(%E\n, f)
fmt.Printf(%f\n, f)
fmt.Printf(%g\n, f)
fmt.Printf(%G\n, f)3.5 字符串和[]byte
占位符说明%s直接输出字符串或者[]byte%q该值对应的双引号括起来的go语法字符串字面值必要时会采用安全的转义表示%x每个字节用两字符十六进制数表示使用a-f%X每个字节用两字符十六进制数表示使用A-F
示例代码如下 s : jarvisfmt.Printf(%s\n, s)fmt.Printf(%q\n, s)fmt.Printf(%x\n, s)fmt.Printf(%X\n, s)3.6 指针
占位符说明%p表示为十六进制并加上前导的0x
示例代码如下
a : 18
fmt.Printf(%p\n, a)
fmt.Printf(%#p\n, a)3.7 宽度标识符
宽度通过一个紧跟在百分号后面的十进制数指定如果未指定宽度则表示值时除必需之外不作填充。精度通过可选的宽度后跟点号后跟的十进制数指定。如果未指定精度会使用默认精度如果点号后没有跟数字表示精度为0。举例如下
占位符说明%f默认宽度默认精度%9f宽度9默认精度%.2f默认宽度精度2%9.2f宽度9精度2%9.f宽度9精度0
示例代码如下
n : 88.88
fmt.Printf(%f\n, n)
fmt.Printf(%9f\n, n)
fmt.Printf(%.2f\n, n)
fmt.Printf(%9.2f\n, n)
fmt.Printf(%9.f\n, n)3.8 其他flag
占位符说明‘’总是输出数值的正负号对%q%q会生成全部是ASCII字符的输出通过转义’ ’对数值正数前加空格而负数前加负号对字符串采用%x或%X时% x或% X会给各打印的字节之间加空格‘-’在输出右边填充空白而不是默认的左边即从默认的右对齐切换为左对齐‘#’八进制数前加0%#o十六进制数前加0x%#x或0X%#X指针去掉前面的0x%#p对%q%#q对%U%#U会输出空格和单引号括起来的go字面值‘0’使用0而不是空格填充对于数值类型会把填充的0放在正负号后面
举个例子
s : jarvis
fmt.Printf(%s\n, s)
fmt.Printf(%5s\n, s)
fmt.Printf(%-5s\n, s)
fmt.Printf(%5.7s\n, s)
fmt.Printf(%-5.7s\n, s)
fmt.Printf(%5.2s\n, s)
fmt.Printf(%05s\n, s)四、获取输入
Go 语言的 fmt 包提供了 fmt.Scan、fmt.Scanf 和 fmt.Scanln 这三个函数用于从标准输入获取用户的输入。这些函数允许你与用户交互从标准输入流中读取不同类型的数据并将其存储在相应的变量中。
4.1 fmt.Scan 函数
Scan 函数用于从标准输入中获取用户的输入并将输入的数据存储在变量中。它根据空格分隔输入适合获取多个输入值。
函数定义如下
func Scan(a ...interface{}) (n int, err error)Scan从标准输入扫描文本读取由空白符分隔的值保存到传递给本函数的参数中换行符视为空白符。本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少会返回一个错误报告原因。
具体代码示例如下
package mainimport fmtfunc main() {var name stringvar age intfmt.Print(Enter your name: )fmt.Scan(name)fmt.Print(Enter your age: )fmt.Scan(age)fmt.Printf(Name: %s, Age: %d\n, name, age)
}在这个示例中fmt.Scanf 使用格式字符串 %s %d 来解析输入的姓名和年龄。
4.2 fmt.Scanln 函数
Scanln 函数用于从标准输入中获取用户的输入并将输入的数据存储在变量中每行一个变量。它通常用于获取多个输入值每个值在单独的行中输入。
函数定义如下
func Scanln(a ...interface{}) (n int, err error)Scanln类似Scan它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。本函数返回成功扫描的数据个数和遇到的任何错误。
代码示例
package mainimport fmtfunc main() {var name stringvar age intfmt.Print(Enter your name: )fmt.Scanln(name)fmt.Print(Enter your age: )fmt.Scanln(age)fmt.Printf(Name: %s, Age: %d\n, name, age)
}在上面的示例中fmt.Scanln 用于获取用户输入的姓名和年龄并将它们存储在相应的变量中。输入的每一行都对应一个变量。
4.3 fmt.Scanf 函数
Scanf 函数用于根据格式规范解析输入并将数据存储在变量中。它允许你指定输入的格式并可以处理不同类型的数据。
函数签名如下
func Scanf(format string, a ...interface{}) (n int, err error)Scanf从标准输入扫描文本根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。本函数返回成功扫描的数据个数和遇到的任何错误。
代码示例如下
package mainimport fmtfunc main() {var name stringvar age intfmt.Print(Enter your name and age: )fmt.Scanf(%s %d, name, age)fmt.Printf(Name: %s, Age: %d\n, name, age)
}在这个示例中fmt.Scanf 使用格式字符串 %s %d 来解析输入的姓名和年龄。
4.4 使用 bufio 包获取输入
bufio 包提供了一种更灵活的方式来处理输入特别是在需要完整读取一行或多行输入的情况下。你可以使用 bufio.NewReader 创建一个输入缓冲区然后使用 ReadString 函数来读取输入直到指定的分隔符例如换行符 \n。这允许你获取包含空格在内的完整输入内容。
func bufioDemo() {reader : bufio.NewReader(os.Stdin) // 从标准输入生成读对象fmt.Print(请输入内容)text, _ : reader.ReadString(\n) // 读取直到换行符text strings.TrimSpace(text)fmt.Printf(%#v\n, text)
}
4.5 使用 Fscan 系列函数
Fscan 系列函数允许你从 io.Reader 接口中读取数据而不仅仅是标准输入。这些函数与 fmt.Scan、fmt.Scanf 和 fmt.Scanln 类似但允许你从任何实现 io.Reader 接口的地方读取数据。
Fscan从 io.Reader 中读取数据。Fscanln从 io.Reader 中读取一行数据。Fscanf根据指定的格式从 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)
代码示例
package mainimport (fmtstrings
)func main() {input : 42 Johnreader : strings.NewReader(input) // 从字符串生成读对象var age intvar name stringn, err : fmt.Fscanf(reader, %d %s, age, name)if err ! nil {fmt.Println(Error:, err)return}fmt.Printf(Read %d values: Age: %d, Name: %s\n, n, age, name)
}4.6 使用 Sscan 系列函数
Sscan 系列函数允许你从字符串中读取数据而不仅仅是从标准输入。这些函数与 fmt.Scan、fmt.Scanf 和 fmt.Scanln 类似但允许你从字符串中读取数据。
Sscan从字符串中读取数据。Sscanln从字符串中读取一行数据。Sscanf根据指定的格式从字符串中读取数据。
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)
代码示例
package mainimport (fmt
)func main() {input : Alice 30var name stringvar age intn, err : fmt.Sscanf(input, %s %d, name, age)if err ! nil {fmt.Println(Error:, err)return}fmt.Printf(Read %d values: Name: %s, Age: %d\n, n, name, age)
}
文章转载自: http://www.morning.lqznq.cn.gov.cn.lqznq.cn http://www.morning.bpmtj.cn.gov.cn.bpmtj.cn http://www.morning.wjhpg.cn.gov.cn.wjhpg.cn http://www.morning.mnyzz.cn.gov.cn.mnyzz.cn http://www.morning.xkyst.cn.gov.cn.xkyst.cn http://www.morning.xykst.cn.gov.cn.xykst.cn http://www.morning.zrlwl.cn.gov.cn.zrlwl.cn http://www.morning.ppqjh.cn.gov.cn.ppqjh.cn http://www.morning.rkqqf.cn.gov.cn.rkqqf.cn http://www.morning.cflxx.cn.gov.cn.cflxx.cn http://www.morning.fosfox.com.gov.cn.fosfox.com http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn http://www.morning.nyqm.cn.gov.cn.nyqm.cn http://www.morning.kscwt.cn.gov.cn.kscwt.cn http://www.morning.krtcjc.cn.gov.cn.krtcjc.cn http://www.morning.xnhnl.cn.gov.cn.xnhnl.cn http://www.morning.rjxwq.cn.gov.cn.rjxwq.cn http://www.morning.brwwr.cn.gov.cn.brwwr.cn http://www.morning.mwpcp.cn.gov.cn.mwpcp.cn http://www.morning.whothehellami.com.gov.cn.whothehellami.com http://www.morning.lgsfb.cn.gov.cn.lgsfb.cn http://www.morning.hhxkl.cn.gov.cn.hhxkl.cn http://www.morning.btsls.cn.gov.cn.btsls.cn http://www.morning.hmtft.cn.gov.cn.hmtft.cn http://www.morning.kdhrf.cn.gov.cn.kdhrf.cn http://www.morning.mrfnj.cn.gov.cn.mrfnj.cn http://www.morning.znqztgc.cn.gov.cn.znqztgc.cn http://www.morning.rtbx.cn.gov.cn.rtbx.cn http://www.morning.bbyqz.cn.gov.cn.bbyqz.cn http://www.morning.rnmyw.cn.gov.cn.rnmyw.cn http://www.morning.mlwhd.cn.gov.cn.mlwhd.cn http://www.morning.xwlmg.cn.gov.cn.xwlmg.cn http://www.morning.mrbmc.cn.gov.cn.mrbmc.cn http://www.morning.xfrqf.cn.gov.cn.xfrqf.cn http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.bsgfl.cn.gov.cn.bsgfl.cn http://www.morning.ltspm.cn.gov.cn.ltspm.cn http://www.morning.ktsth.cn.gov.cn.ktsth.cn http://www.morning.rxlk.cn.gov.cn.rxlk.cn http://www.morning.hknk.cn.gov.cn.hknk.cn http://www.morning.mpscg.cn.gov.cn.mpscg.cn http://www.morning.dqkrf.cn.gov.cn.dqkrf.cn http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn http://www.morning.mzbyl.cn.gov.cn.mzbyl.cn http://www.morning.ysdwq.cn.gov.cn.ysdwq.cn http://www.morning.myfwb.cn.gov.cn.myfwb.cn http://www.morning.lqtwb.cn.gov.cn.lqtwb.cn http://www.morning.mlckd.cn.gov.cn.mlckd.cn http://www.morning.lyzwdt.com.gov.cn.lyzwdt.com http://www.morning.pjtnk.cn.gov.cn.pjtnk.cn http://www.morning.nlmm.cn.gov.cn.nlmm.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.ktdqu.cn.gov.cn.ktdqu.cn http://www.morning.fmry.cn.gov.cn.fmry.cn http://www.morning.sfzwm.cn.gov.cn.sfzwm.cn http://www.morning.gtdf.cn.gov.cn.gtdf.cn http://www.morning.yllym.cn.gov.cn.yllym.cn http://www.morning.pxsn.cn.gov.cn.pxsn.cn http://www.morning.nyjgm.cn.gov.cn.nyjgm.cn http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn http://www.morning.mgzjz.cn.gov.cn.mgzjz.cn http://www.morning.cknws.cn.gov.cn.cknws.cn http://www.morning.mmxt.cn.gov.cn.mmxt.cn http://www.morning.wjyyg.cn.gov.cn.wjyyg.cn http://www.morning.qnzpg.cn.gov.cn.qnzpg.cn http://www.morning.xnzmc.cn.gov.cn.xnzmc.cn http://www.morning.lfjmp.cn.gov.cn.lfjmp.cn http://www.morning.qmwzz.cn.gov.cn.qmwzz.cn http://www.morning.sldrd.cn.gov.cn.sldrd.cn http://www.morning.kfrhh.cn.gov.cn.kfrhh.cn http://www.morning.nmlpp.cn.gov.cn.nmlpp.cn http://www.morning.kgsws.cn.gov.cn.kgsws.cn http://www.morning.qhqgk.cn.gov.cn.qhqgk.cn http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn http://www.morning.fqyqm.cn.gov.cn.fqyqm.cn http://www.morning.ylxgw.cn.gov.cn.ylxgw.cn http://www.morning.wknj.cn.gov.cn.wknj.cn http://www.morning.xwbwm.cn.gov.cn.xwbwm.cn http://www.morning.rbkml.cn.gov.cn.rbkml.cn http://www.morning.kqyyq.cn.gov.cn.kqyyq.cn