Go 语言输出函数

优质
小牛编辑
128浏览
2023-12-01
func Printf(format string, a ...interface{}) (n int, err error)

和 C 语言用法几乎一模一样,只不过新增了一些格式化符号

package main
import "fmt"
func main() {
    name := "微信搜索:代码情缘"
    age := 33
    fmt.Printf("name = %s, age = %d\n", name, age) // name = lnj, age = 33
}

值得注意的是,输出十进制只能通过%d,不能像C语言一样通过 %i

除了和 C 语言一样,可以通过 %o、%x 输出八进制和十六进制外,还可以 直接通过 %b 输出二进制

package main
import "fmt"
func main() {
    num := 15
    fmt.Printf("十进制 = %d\n", num)
    fmt.Printf("八进制 = %o\n", num)
    fmt.Printf("十六进制 = %x\n", num)
    fmt.Printf("二进制 = %b\n", num)
}

除此之外,Go语言还增加了 %T 控制符,用于输出值的类型

package main
import "fmt"
func main() {
  type Person struct {
  	name string
  	age int
  }
  num1 := 10
  num2 := 3.14
  per := Person{"lnj", 33}
  fmt.Printf("num1 = %T\n", num1) // int
  fmt.Printf("num2 = %T\n", num2) // float64
  fmt.Printf("per = %T\n", per) // main.Person
}

除此之外,Go 语言还增加了 %v 控制符,用于打印所有类型数据

  • Go 语言中输出某一个值,很少使用%d%f等,一般都使用 %v 即可
  • 输出复合类型时会自动生成对应格式后再输出
package main
import "fmt"
func main() {
  type Person struct {
  	name string
  	age int
  }
  num1 := 10
  num2 := 3.14
  per := Person{"lnj", 33}
  // 此时相当于把%v当做%d
  fmt.Printf("num1 = %v\n", num1) // 10
  // 此时相当于把%v当做%f
  fmt.Printf("num2 = %v\n", num2) // 3.14
}

Go 语言 Printf 函数其它特性,如宽度、标志、精度、长度、转移符号等,和C语言一样.


func Println(a ...interface{}) (n int, err error)

采用默认格式将其参数格式化并写入标准输出,

  • 输出之后 在结尾处添加换行
  • 传入多个参数时, 会自动在相邻参数之间添加空格
  • 传入符合类型数据时, 会自动生成对应格式后再输出
package main
import "fmt"
func main() {
  num1 := 10
  num2 := 3.14
  fmt.Println(num1, num2) // 10 3.14
  fmt.Println("num1 =", num1, "num2 =", num2) // num1 = 10 num2 = 3.14

  type Person struct {
  	name string
  	age int
  }
  per := Person{"lnj", 33}
  fmt.Println(per) // {lnj 33}
}

func Print(a ...interface{}) (n int, err error)

和 Println 几乎一样

  • 输出之后不会在结尾处添加换行
  • 传入多个参数时, 只有两个相邻的参数都不是字符串,才会在相邻参数之间添加空格
  • 传入符合类型数据时, 会自动生成对应格式后再输出
package main
import "fmt"
func main() {
  num1 := 10
  num2 := 3.14
  fmt.Print(num1, num2) // 10 3.14
  fmt.Print("num1 =", num1, "num2 =", num2) // num1 =10 num2 =3.14

  type Person struct {
  	name string
  	age int
  }
  per := Person{"lnj", 33}
  fmt.Print(per) // {lnj 33}
}

以下三个函数和 Printf/Println/Print 函数一样,只不过上面三个函数是输出到标准输出,而下面三个函数可以通过 w 指定输出到什么地方

  • func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
  • func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
  • func Fprint(w io.Writer, a ...interface{}) (n int, err error)
package main
import (
	"fmt"
	"net/http"
	"os"
)
func main() {
	// os.Stdout 写入到标准输出
	name := "lnj"
	age := 33
	// 第一个参数: 指定输出到什么地方
	// 第二个参数: 指定格式控制字符串
	// 第三个参数: 指定要输出的数据
	fmt.Fprintf(os.Stdout, "name = %s, age = %d\n", name, age)

	// http.ResponseWriter 写入到网络响应
	http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
		fmt.Fprintf(writer, "name = %s, age = %d\n", name, age)
	})
	http.ListenAndServe(":8888", nil)
}

以下三个函数和 Printf/Println/Print 函数一样,只不过上面三个函数是输出到标准输出,而下面三个函数不会输出,而是将字符串返回给我们

  • func Sprintf(format string, a ...interface{}) string
  • func Sprint(a ...interface{}) string
  • func Sprintln(a ...interface{}) string
package main
import (
	"fmt"
	"net/http"
	"os"
)
func main() {
	name := "lnj"
	age := 33
	// 按照指定的格式生成字符串
	str := fmt.Sprintf("name = %s, age = %d\n", name, age)
	// 输出生成的字符串
	fmt.Println(str)
}