Golang中Print()、Println()和Printf()之间的区别

前言

Go语言是由Google公司开发的一门编程语言,具有简洁的语法和高效的开发体验,支持高并发编程且性能出色。它跨平台能力强,拥有丰富的标准库和良好的扩展性,适用于后端开发、云计算、分布式系统和命令行工具等多种应用场景。

目录

前言

Print系列函数

Print()

Println()

Printf()

Fprint系列函数

Fprint()

Fprintln()

Fprintf()

Sprint系列函数

Sprint()

Sprintln()

Sprintf()

Errorf函数

Errorf()


Print系列函数

Print系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符串,Println函数会在输出内容的结尾添加一个换行符。

  • Print()

    • 功能:将参数列表中的各个参数转换为字符串并写入到标准输出中,非字符串参数之间会添加空格,返回写入的字节数。

    • 函数签名:

      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)

示例:

func main () {
	name := "小明"

	fmt.Print("直接输出内容")
	fmt.Println("内容结尾添加一个换行符")
	fmt.Printf("格式化输出:%v\n", name)
}

输出结果:

直接输出内容内容结尾添加一个换行符
格式化输出:小明

格式化规则:

动词说明示例
%d十进制有符号整数%d → 123
%x十六进制有符号整数%x → 7b
%f浮点数%f → 123.456
%s字符串%s → hello
%q双引号包围的字符串,必要时会转义%q → "hello"
%v默认格式%v → 123hello
%%百分号本身%% → %

Fprint系列函数

这些函数与Print系列功能类似,但会将转换结果写入到io.Writer中,例如文件。

  • Fprint()

    • 函数签名:

      func Fprint(w io.Writer, a ...interface{}) (n int, err error)
  • Fprintln()

    • 函数签名:

      func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
  • Fprintf()

    • 函数签名:

      func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)

当你需要将内容输出到其他地方(如文件、网络等)时可以使用fmt.Fprint。例如,你可以将输出写入到一个文件中。

示例:

package main

import (
	"fmt"
	"os"
)

func main() {
	// 使用 fmt.Print 输出到控制台
	fmt.Print("Hello, Print!\n")

	// 使用 fmt.Fprint 输出到文件
	file, err := os.Create("output.txt")
	if err != nil {
		fmt.Println("Error creating file:", err)
		return
	}
	defer file.Close()

	fmt.Fprint(file, "Hello, Fprint!")
}

在这个例子中,fmt.Print 将字符串输出到控制台,而 fmt.Fprint 将字符串输出到一个名为 output.txt 的文件中。 

在 Go 语言中,io.Writer 是一个接口类型,它定义了一个写入数据的方法。任何实现了这个接口的类型都可以被用作 io.Writer。

常见的实现了 io.Writer 接口的对象:

1. 文件 (os.File)

2. 网络连接 (net.Conn)

3. 缓冲区 (bytes.Buffer)

4. 多路写入器 (io.MultiWriter)

5. HTTP 响应写入器 (http.ResponseWriter)

Sprint系列函数

这些函数同样与Print系列功能类似,但会将转换结果以字符串形式返回,而不是直接输出

  • Sprint()

    • 函数签名:

      func Sprint(a ...interface{}) string
  • Sprintln()

    • 函数签名:

      func Sprintln(a ...interface{}) string
  • Sprintf()

    • 函数签名:

      func Sprintf(format string, a ...interface{}) string

示例:

package main

import (
	"fmt"
)

func main() {
	// 使用 Sprint
	str1 := fmt.Sprint("Hello, ", "World!", 123)
	fmt.Println(str1) // 输出:Hello, World!123

	// 使用 Sprintln
	str2 := fmt.Sprintln("Hello, ", "World!", 123)
	fmt.Println(str2) // 输出:Hello,  World! 123

	// 使用 Sprintf
	str3 := fmt.Sprintf("Hello, %s! You are %d years old.", "Alice", 30)
	fmt.Println(str3) // 输出:Hello, Alice! You are 30 years old.

	// 组合使用
	name := "Bob"
	age := 25
	str4 := fmt.Sprintf("Name: %s, Age: %d", name, age)
	fmt.Println(str4) // 输出:Name: Bob, Age: 25
}

输出结果:

Hello, World!123
Hello,  World! 123
Hello, Alice! You are 30 years old.
Name: Bob, Age: 25

Errorf函数

  • Errorf()

    • 功能:与Sprintf()类似,但结果字符串被包装成了error类型。

    • 函数签名:

      func Errorf(format string, a ...interface{}) error

用法:

package main

import (
	"fmt"
)

func divide(a, b float64) (float64, error) {
	if b == 0 {
		return 0, fmt.Errorf("除数不能为零")
	}
	return a / b, nil
}

func main() {
	result, err := divide(10, 0)
	if err != nil {
		fmt.Println("错误:", err)
		return
	}
	fmt.Println("结果:", result)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值