Go 语言输出函数
优质
小牛编辑
148浏览
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) }