前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang语言--【社区推荐阅读】 fmt用法

Golang语言--【社区推荐阅读】 fmt用法

作者头像
李海彬
发布2018-03-21 11:28:02
1.2K0
发布2018-03-21 11:28:02
举报

fmt 包中的函数和方法

// format.go -------------------------------------------------- // 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 --------------------------------------------------

-------------------------------------------------- // 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 } -------------------------------------------------- // 示例

/ 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 被全部填写完毕
// 则停止扫描
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 获取以空格分割的 token
type ScanState interface {
// ReadRune 从输入对象中读出一个 Unicode 字符
// 如果在 Scanln、Fscanln 或 Sscanln 中调用该方法
// 该方法会在遇到 '\n' 或读取超过指定的宽度时返回 EOF
ReadRune() (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
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档