go语言的基础语法 | 豆包MarsCode AI刷题

25 阅读3分钟

Go fmt 库

Printing

fmt包实现了格式化I/O函数,Print() 函数将参数列表 a 中的各个参数转换为字符串并写入到标准输出中。

非字符串参数之间会添加空格,返回写入的字节数。 func Print(a ...interface{}) (n int, err error)

Println() 函数功能类似 Print,只不过最后会添加一个换行符。

所有参数之间会添加空格,返回写入的字节数。 func Println(a ...interface{}) (n int, err error) Printf() 函数将参数列表 a 填写到格式字符串 format 的占位符中。

填写后的结果写入到标准输出中,返回写入的字节数。 func Printf(format string, a ...interface{}) (n int, err error)

package main

import "fmt"

func main() { // ab1 2 3cd fmt.Print("a", "b", 1, 2, 3, "c", "d", "\n") // a b 1 2 3 c d fmt.Println("a", "b", 1, 2, 3, "c", "d") // ab 1 2 3 cd fmt.Printf("ab %d %d %d cd\n", 1, 2, 3)

以下三个函数功能同上面三个函数,只不过将转换结果以字符串形式返回。 func Fprint(w io.Writer, a ...interface{}) (n int, err error) func Fprintln(w io.Writer, a ...interface{}) (n int, err error) func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)

以下函数功能同 Sprintf() 函数,只不过结果字符串被包装成了 error 类型。 func Errorf(format string, a ...interface{}) error

实例: package main

import ( "fmt" )

func main() { var error = fmt.Errorf("ab %d %d %d cd\n", 1, 2, 3) // ab 1 2 3 cd fmt.Print(error) }

不考虑占位符的话,如果操作数是接口值,就会使用其内部的具体值,而非接口本身。 因此: 若其格式(它对于Println等函数是隐式的%v)对于字符串是有效的(%s %q %v %x %X),以下两条规则也适用:

若一个操作数实现了 error 接口,Error 方法就能将该对象转换为字符串,随后会根据占位符的需要进行格式化。

若一个操作数实现了 String() string 方法,该方法能将该对象转换为字符串,随后会根据占位符的需要进行格式化。

Formatter 接口

Formatter 由自定义类型实现,用于实现该类型的自定义格式化过程。

当格式化器需要格式化该类型的变量时,会调用其 Format 方法。

Formatter接口的定义如下: type Formatter interface { // f 用于获取占位符的旗标、宽度、精度等信息,也用于输出格式化的结果 // c 是占位符中的动词 Format(f State, c rune) }

由格式化器(Print之类的函数)实现,用于给自定义格式化过程提供信息: type State interface { // Formatter 通过 Write 方法将格式化结果写入格式化器中,以便输出。 Write(b []byte) (ret int, err error) // Formatter 通过 Width 方法获取占位符中的宽度信息及其是否被设置。 Width() (wid int, ok bool) // Formatter 通过 Precision 方法获取占位符中的精度信息及其是否被设置。 Precision() (prec int, ok bool) // Formatter 通过 Flag 方法获取占位符中的旗标[+- 0#]是否被设置。 Flag(c int) bool }

Stringer 接口

Stringer 由自定义类型实现,用于实现该类型的自定义格式化过程。

当格式化器需要输出该类型的字符串格式时就会调用其 String 方法。

Stringer接口的定义如下:

type Stringer interface { String() string }

根据Go语言中实现接口的定义,一个类型只要有 String() string 方法,我们就说它实现了Stringer接口。

如果格式化输出某种类型的值,只要它实现了String()方法,那么会调用String()方法进行处理。