Go语言打印输出

一、打印输出

  • 在程序中输出使用频率很高,使用输出语句可以在程序执行过程中把一些结果输出到控制台中,程序员通过控制台中输出结果判断是否符合预期
  • 在Go语言中有多种输出方式,不同的输出适用场景不同.归纳起来三种,每种还分为3种方式(原内容,原内容+ln,原内容+f)
    • PrintXX()
    • FprintXX()
    • SprintXX()

二、FprintXX

  • FprintXX在Go Web中使用比较多,把内容写到响应流中.
  • 以Fprintln()举例,源码如下
// Fprintln formats using the default formats for its operands and writes to w.
// Spaces are always added between operands and a newline is appended.
// It returns the number of bytes  written and any write error encountered.
func Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
	p := newPrinter()
	p.doPrintln(a)
	n, err = w.Write(p.buf)
	p.free()
	return
}
  • 函数参数中第一个参数是输出流,后面参数是内容,表示把内容写入到输出流中
  • 第一个返回值表示输出内容长度(字节数),第二个返回值表示错误,如果没有错误取值nil
    • Fprintln()输出后会添加换行符,所以长度比内容多1个
    • Fprintln()源码中p.doPrintln(a)的源码
// doPrintln is like doPrint but always adds a space between arguments
// and a newline after the last argument.
func (p *pp) doPrintln(a []interface{}) {
	for argNum, arg := range a {
		if argNum > 0 {
			p.buf.WriteByte(' ')
		}
		p.printArg(arg, 'v')
	}
	p.buf.WriteByte('\n')//此处多添加了换行
}

FprintXX()支持下面三种方式

  • os.Stdout 表示控制台输出流
func main() {
	fmt.Fprint(os.Stdout, "内容1")//向流中写入内容,多个内容之间没有空格
	fmt.Fprintln(os.Stdout, "内容2")//向流中写入内容后额外写入换行符,多个内容之间空格分割
	fmt.Fprintf(os.Stdout, "%s", "内容3")//根据verb格式向流中写入内容
}

三、PrintXX

PrintXX支持下面三种方式

func main() {
	fmt.Println("内容","内容")//输出内容后换行
	fmt.Print("内容","内容")//输出内容后不换行
	fmt.Printf("verb","内容")//根据verb输出指定格式内容
}

以Println()举例,源码如下

// Println formats using the default formats for its operands and writes to standard output.
// Spaces are always added between operands and a newline is appended.
// It returns the number of bytes written and any write error encountered.
func Println(a ...interface{}) (n int, err error) {
	return Fprintln(os.Stdout, a...)
}
  • 可以看出Println()底层实际是Fprintln(),返回值依然是内容长度和错误信息

四、SPrintXX

  • 以Sprintln()举例,和Println()主要的区别是:
  • Sprintln()把形成结果以字符串返回,并没有打印到控制台
  • Println()把结果打印到控制台,返回内容长度和错误
  • 所以从严格意义角度讲SprintXX不是打印输出,而更像字符串转换
  • 源码如下
// Sprintln formats using the default formats for its operands and returns the resulting string.
// Spaces are always added between operands and a newline is appended.
func Sprintln(a ...interface{}) string {
	p := newPrinter()
	p.doPrintln(a)
	s := string(p.buf)
	p.free()
	return s
}

依然支持三种写法

func main() {
	fmt.Sprint("内容1", "内容12")
	fmt.Sprintln("内容2")
	fmt.Sprintf("%s", "内容3")
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书香水墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值