fmt 包中的函数和方法
/ Fprintf 将参数列表 a 填写到格式字符串 format 的占位符中
// 并将填写后的结果写入 w 中,返回写入的字节数
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
// Printf 将参数列表 a 填写到格式字符串 format 的占位符中
// 并将填写后的结果写入 os.Stdout 中,返回写入的字节数
func Printf(format string, a ...interface{}) (n int, err error)
// Sprintf 将参数列表 a 填写到格式字符串 format 的占位符中
// 返回填写后的结果
func Sprintf(format string, a ...interface{}) string
// Errorf 将参数列表 a 填写到格式字符串 format 的占位符中
// 并将填写后的结果转换为 error 类型返回
func Errorf(format string, a ...interface{}) error
------------------------------------------------------------
// Fprint 将参数列表 a 中的各个参数转换为字符串格式并写入到 w 中
// 各个参数之间以空格分隔,返回写入的字节数
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
// Print 将参数列表 a 中的各个参数转换为字符串格式并写入到 os.Stdout 中
// 各个参数之间以空格分隔,返回写入的字节数
func Print(a ...interface{}) (n int, err error)
// Sprint 将参数列表 a 中的各个参数转换为字符串格式并返回
// 各个参数之间以空格分隔
func Sprint(a ...interface{}) string
------------------------------------------------------------
// Fprintln 在 Fprint 的基础上,再向 w 中写入一个换行符
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
// Println 在 Print 的基础上,再向 os.Stdout 中写入一个换行符
func Println(a ...interface{}) (n int, err error)
// Sprintln 在 Sprint 的基础上,在返回值的最后添加一个换行符
func Sprintln(a ...interface{}) string
------------------------------------------------------------
// 示例
func main() {
fmt.Fprintf(os.Stdout, "%08b\n", 32) // 00100000
fmt.Printf("%08b\n", 32) // 00100000
fmt.Print(fmt.Sprintf("%08b\n", 32)) // 00100000
fmt.Print(fmt.Errorf("%08b\n", 32)) // 00100000
fmt.Fprint(os.Stdout, "A")
fmt.Print("B")
fmt.Print(fmt.Sprint("C"))
// ABC
fmt.Print("\n")
fmt.Fprintln(os.Stdout, "A") // A
fmt.Println("B") // B
fmt.Print(fmt.Sprintln("C")) // C
}
------------------------------------------------------------
// Formatter 用于实现对象的自定义格式输出
type Formatter interface {
// Format 用来处理当对象遇到 c 标记时的输出方式(c 相当于 %s 中的 s)
// f 用来获取占位符的宽度、精度、扩展标记等信息,同时实现最终的输出
// c 是要处理的标记
Format(f State, c rune)
}
// State 用来获取占位符的状态,包括宽度、精度、扩展标记等信息
// 同时实现格式化后的字符串的输出
type State interface {
// Write 用于将格式化后的字符串输出到指定的对象
// 根据 Print 函数(Fprintf,Printf,Sprintf)的不同,输出到不同的地方
Write(b []byte) (ret int, err error)
// Width 返回占位符的宽度值(wid)和宽度是否被设置(ok)
Width() (wid int, ok bool)
// Precision 返回占位符的精度值(prec)和精度是否被设置(ok)
Precision() (prec int, ok bool)
// Flag 返回扩展标记 c(一个字符,比如 %#s 中的 #)是否已被设置
Flag(c int) bool
}
type Stringer interface {
// String 获取对象的文本形式
String() string
}
type GoStringer interface {
// GoString 获取对象的 Go 语法文本形式(以 %#v 格式输出的文本)
GoString() string
}
------------------------------------------------------------
// 示例
type Ustr string
func (us Ustr) String() string {
return string(us) + " 自定义格式"
}
func (us Ustr) GoString() string {
return string(us) + " Go 格式"
}
func (us Ustr) Format(f fmt.State, c rune) {
switch c {
case 'm', 'M':
f.Write([]byte(us + "\n扩展标记:["))
if f.Flag('-') {
f.Write([]byte(" -"))
}
if f.Flag('+') {
f.Write([]byte(" +"))
}
if f.Flag('#') {
f.Write([]byte(" #"))
}
if f.Flag(' ') {
f.Write([]byte(" space"))
}
if f.Flag('0') {
f.Write([]byte(" 0"))
}
f.Write([]byte(" ]\n"))
if w, wok := f.Width(); wok {
f.Write([]byte("宽度值:" + fmt.Sprint(w) + "\n"))
}
if p, pok := f.Precision(); pok {
f.Write([]byte("精度值:" + fmt.Sprint(p)))
}
case 'v': // 如果使用 Format 函数,则必须自己处理所有格式,包括 %#v
if f.Flag('#') {
f.Write([]byte(us.GoString()))
} else {
f.Write([]byte(us.String()))
}
default: // 如果使用 Format 函数,则必须自己处理默认输出
f.Write([]byte(us.String()))
}
}
func main() {
us := Ustr("Hello World!")
fmt.Printf("% 0-+#8.5m\n", us)
// Hello World!
// 扩展标记:[ - + # space 0 ]
// 宽度值:8
// 精度值:5
fmt.Println(us)
// Hello World! 自定义格式
fmt.Printf("%#v\n", us)
// Hello World! Go 格式
}
============================================================
// scan.go
------------------------------------------------------------
// Fscanf 用于扫描 r 中的数据,并根据 format 指定的格式
// 将扫描出的数据填写到参数列表 a 中
// 当 r 中的数据被全部扫描完毕或扫描长度超出 format 指定的长度时
// 则停止扫描(换行符会被当作空格处理)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)
func main() {
s := strings.NewReader("我的名字叫 Golang ,今年 4 岁")
var name string
var age int
// 注意:这里必须传递指针 &name, &age
// 要获取的数据前后必须有空格
fmt.Fscanf(s, "我的名字叫 %s ,今年 %d 岁", &name, &age)
fmt.Printf("%s %d", name, age)
// Golang 4
}
// Scanf 用于扫描 os.Stdin 中的数据,并根据 format 指定的格式
// 将扫描出的数据填写到参数列表 a 中
// 当 r 中的数据被全部扫描完毕或者扫描长度超出 format 指定的长度时
// 则停止扫描(换行符会被当作空格处理)
func Scanf(format string, a ...interface{}) (n int, err error)
func main() {
var name string
var age int
// 注意:这里必须传递指针 &name, &age
// 要获取的数据前后必须有空格
fmt.Scanf("%s %d", &name, &age)
// 在控制台输入:Golang 4
fmt.Printf("我的名字叫 %s ,今年 %d 岁", name, age)
// 我的名字叫 Golang ,今年 4 岁
}
// Sscanf 用于扫描 str 中的数据,并根据 format 指定的格式
// 将扫描出的数据填写到参数列表 a 中
// 当 r 中的数据被全部扫描完毕或者扫描长度超出 format 指定的长度时
// 则停止扫描(换行符会被当作空格处理)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)
func main() {
s := "我的名字叫 Golang ,今年 4 岁"
var name string
var age int
// 注意:这里必须传递指针 &name, &age
// 要获取的数据前后必须有空格
fmt.Sscanf(s, "我的名字叫 %s ,今年 %d 岁", &name, &age)
fmt.Printf("%s %d", name, age)
// Golang 4
}
------------------------------------------------------------
// Fscan 用于扫描 r 中的数据,并将数据以空格为分割符进行分割
// 然后填写到参数列表 a 中
// 当 r 中的数据被全部扫描完毕或者参数列表 a 被全部填写完毕
// 则停止扫描(换行符会被当作空格处理)
func Fscan(r io.Reader, a ...interface{}) (n int, err error)
// Scan 用于扫描 os.Stdin 中的数据,并将数据以空格为分割符进行分割
// 然后填写到参数列表 a 中
// 当 r 中的数据被全部扫描完毕或者参数列表 a 被全部填写完毕
// 则停止扫描(换行符会被当作空格处理)
func Scan(a ...interface{}) (n int, err error)
// Sscan 用于扫描 str 中的数据,并将数据以空格为分割符进行分割
// 然后填写到参数列表 a 中
// 当 r 中的数据被全部扫描完毕或者参数列表 a 被全部填写完毕
// 则停止扫描(换行符会被当作空格处理)
func Sscan(str string, a ...interface{}) (n int, err error)
------------------------------------------------------------
// Fscanln 用于扫描 r 中的数据,并将数据以空格为分割符进行分割
// 然后填写到参数列表 a 中
// 当扫描过程中遇到 '\n' 或者参数列表 a 被全部填写完毕
转载自:https://blog.csdn.net/txj236/article/details/53895009
// 则停止扫描func Fscanln(r io.Reader, a ...interface{}) (n int, err error)// Scanln 用于扫描 os.Stdin 中的数据,并将数据以空格为分割符进行分割// 然后填写到参数列表 a 中// 当扫描过程中遇到 '\n' 或者参数列表 a 被全部填写完毕// 则停止扫描func Scanln(a ...interface{}) (n int, err error)// Sscanln 用于扫描 str 中的数据,并将数据以空格为分割符进行分割// 然后填写到参数列表 a 中// 当扫描过程中遇到 '\n' 或者参数列表 a 被全部填写完毕// 则停止扫描func Sscanln(str string, a ...interface{}) (n int, err error)------------------------------------------------------------// ScanState 会返回扫描状态给自定义的 Scanner// Scanner 可能会做字符的实时扫描// 或者通过 ScanState 获取以空格分割的 tokentype ScanState interface {// ReadRune 从输入对象中读出一个 Unicode 字符// 如果在 Scanln、Fscanln 或 Sscanln 中调用该方法// 该方法会在遇到 '\n' 或读取超过指定的宽度时返回 EOFReadRune() (r rune, size int, err error)// UnreadRune 撤消最后一次的 ReadRune 操作UnreadRune() error// SkipSpace 跳过输入数据中的空格// 在 Scanln、Fscanln、Sscanln 操作中,换行符会被当作 EOF// 在其它 Scan 操作中,换行符会被当作空格SkipSpace()// 如果参数 skipSpace 为 true,则 Token 会跳过输入数据中的空格// 然后返回满足函数 f 的连续字符,如果 f 为 nil,则使用 !unicode.IsSpace 来代替 f// 在 Scanln、Fscanln、Sscanln 操作中,换行符会被当作 EOF// 在其它 Scan 操作中,换行符会被当作空格// 返回的 token 是一个切片,返回的数据可能在下一次调用 Token 的时候被修改Token(skipSpace bool, f func(rune) bool) (token []byte, err error)// Width 返回宽度值以及宽度值是否被设置Width() (wid int, ok bool)// 因为 ReadRune 已经通过接口实现,所以 Read 可能永远不会被 Scan 例程调用// 一个 ScanState 的实现,可能会选择废弃 Read 方法,而使其始终返回一个错误信息Read(buf []byte) (n int, err error)}// Scanner 用于实现对象的自定义格式扫描type Scanner interface {// Scan 用来处理当对象遇到 c 标记时的扫描方式(c 相当于 %s 中的 s)// state 用来处理扫描状态// c 是要处理的标记Scan(state ScanState, verb rune) error}
fmt 包中的函数和方法的更多相关文章
- go语言中regexp包中的函数和方法
// regexp.go ------------------------------------------------------------ // 判断在 b 中能否找到正则表达式 patter ...
- vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表
vlookup函数基本使用--如何将两个Excel表中的数据匹配:excel表中vlookup函数使用方法将一表引到另一表 一.将几个学生的籍贯匹配出来‘ 二.使用查找与引用函数 vlookup 三. ...
- Spring自动扫描无法扫描jar包中bean的解决方法(转)
转载自:http://www.jb51.net/article/116357.htm 在日常开发中往往会对公共的模块打包发布,然后调用公共包的内容.然而,最近对公司的公共模块进行整理发布后.sprin ...
- 查看dll中的函数(方法)
https://jingyan.baidu.com/article/5553fa82b953b365a23934b7.html 查看dll中的函数(方法) 听语音 | 浏览:2004 | 更新:201 ...
- shell 从函数文件中调用函数的方法
你可以把所有的函数存储在一个函数文件中 你可以把所有的文件函数加载到当前脚本或命令行 加载函数文件中所有函数的方法: source xxx.sh
- Web项目替换jar包中的文件的方法
经常遇到这样的问题,需要修改jar包中的方法.应该如何做? 1.有些很人性化的框架jar包,比如SpringSecurity,可以修改配置文件指定一个新建的类,让类实现Jar包中的对应的接口就好了. ...
- Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)
代码前需要了解的关于Calendar类的内容: 1.在util包中,首先要知道Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象.Calendar 的 ...
- MySQL中count函数使用方法详解
count函数是用来统计表中或数组中记录的一个函数,下面我来介绍在MySQL中count函数用法与性能比较吧. count(*) 它返回检索行的数目, 不论其是否包含 NULL值. SELECT ...
- odoo继承父类中的函数(方法)
使用_inherit继承父类重新设计新类时,可以调用父类中的函数,具体为: 第一步:获得某个模型('model.name')的数据集并进行某种集合操作(model_function),从而获得想要的数 ...
随机推荐
- APPScan-简单操作流程
图解安全扫描工具 AppScan使用 IBM Rational AppScan 是一个面向 Web 应用安全检测的自动化工具,使用它可以自动化检测 Web 应用的安全漏洞. 比如跨站点脚本攻击(C ...
- hibernate3缓存(hibernate)
一级缓存:当应用程序调用Session 的save() .update() .savaeOrUpdate() .get() 或load() ,以及调用查询接口的list() .iterate() 或f ...
- 函数的参数是函数,函数中Ajax返回的回调函数中的函数运行
调用函数 checkAjax('addrinfo',formdata,vzxcv); 函数checkAjax function checkAjax(url,formdata,call_back){ / ...
- 如何正确入门Windows系统下驱动开发领域?
[作者]猪头三个人网站 :http://www.x86asm.com/ [序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文 ...
- 洛谷 P2921 在农场万圣节
https://www.luogu.org/problemnew/show/P2921 开始感觉这题30行代码就可以搞定,还是太菜啦,还是乖乖地写了tarjan. 对图进行缩点,那么这个强联通分量中的 ...
- LeetCode 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 ...
- 哪些 Python 库让你相见恨晚?
知乎用户,A European Swallow. 苇叶.Aran He.jerry等人赞同 补充三个有助于自动化日常工作的: sh:sh 1.08 — sh v1.08 documentation可以 ...
- (1) zabbix进程构成
进程介绍 zabbix_agentd客户端守护进程,此进程收集客户端数据,例如cpu负载.内存.硬盘使用情况等 zabbix_getzabbix工具,单独使用的命令,通常在server或者proxy端 ...
- python爬虫入门一:爬虫基本原理
1. 什么是爬虫 爬虫就是请求网站并提取数据的自动化程序 2. 爬虫的基本流程 1)发送请求 通过HTTP库向目标站点发送请求,即发送一个Request. 请求可以包含额外的headers等信息,等待 ...
- “程序设计与算法训练”课程设计:“BP神经网络的实现”(C++类封装实现)
一 题目: 71 BP神经网络的实现: 利用C++语言实现BP神经网络, 并利用BP神经网络解决螨虫分类问题: 蠓虫分类问题:对两种蠓虫(A与B)进行鉴别,依据的资料是触角和翅膀的长度,已知了9支Af ...