fmt打印不显示 go_漫谈golang之fmt格式化模块

fmt 漫谈

fmt常用的格式化字符串

%v 是个通用的占位符。它会自动将变量转换为默认格式的字符串,这在打印字符串或数字等原语时非常有用,而且不需要特定的选项

%#v 根据go语法打印。尤其在打印struct和切片时特别直观

package main

import (

"fmt"

)

//1

var brand = "ALIENWARE"

type computer struct {

name string

price float32

config []string

brand *string

}

func main() {

myComputer := computer{"tktk", 18000.00, []string{"i7 9700k", "RTX 2080Ti", "DDR4 32G"}, &brand}

fmt.Printf("my computer is: \n%#v\n", myComputer)

fmt.Printf("my computer is: \n%v\n", myComputer)

}

结果:

go version go1.12 linux/amd64

my computer is:

main.computer{name:"tktk", price:18000, config:[]string{"i7 9700k", "RTX 2080Ti", "DDR4 32G"}, brand:(*string)(0x5531b0)}

my computer is:

{tktk 18000 [i7 9700k RTX 2080Ti DDR4 32G] 0x5531b0}

}

%T 打印变量的类型

%d 打印10进制整数

%x和%X 打印16进制整数

%f 打印浮点数,可以通过%8.2f,%-8.2f,%08.2f,% f等来控制打印字符串的空格

%q 能打印加引号的字符串。当您的数据可能有不可见字符(如空字符串)时,这是有用的,因为引用的字符串将它们打印为转义序列。

%p 打印变量的指针地址。当您正在调试代码并且希望检查不同的指针变量是否引用相同的数据时,这个方法非常有用。

fmt Printing

FMT包的主要用途是格式化字符串。这些格式化函数按其输出类型-STDOUT、io.Writer和String进行分组。

打印到stdout

// 按照默认格式打印一系列变量

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

// 相比Print,在变量之间插入了空格,并最后添加上换行符

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

// 根据自定义格式化字符串,能打印不同格式的输出

func Printf(format string, a ...interface{}) (n int, err error)

打印到io.Writer

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

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

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

Fprint是更通用的形式,print仅仅是Fprint(os.Stdout, "Hello World!")的包装

格式为字符串

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

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

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

当大量采用Sprint产生字符串,会产生瓶颈问题。

Errorf()

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

return errors.New(Sprintf(format, a...))

}

Scanning

fmt包也有从stdin,io.Reader, string读取并格式化的api。

从stdin读取

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

func Scanf(format string, a ...interface{}) (n int, err error)

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

从io.Reader读取

func Fscan(r io.Reader, a ...interface{}) (n int, err error)

func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)

func Fscanln(r io.Reader, a ...interface{}) (n int, err error)

从string读取

func Sscan(str string, a ...interface{}) (n int, err error)

func Sscanf(str string, format string, a ...interface{}) (n int, err error)

func Sscanln(str string, a ...interface{}) (n int, err error)

var name string

var age int

if _, err := fmt.Scan(&name, &age); err != nil {

fmt.Println(err)

os.Exit(1)

}

fmt.Printf("Your name is: %s\n", name)

fmt.Printf("Your age is: %d\n", age)

执行交互

$ go run main.go

Jane 25

Your name is: Jane

Your age is: 25

总之,如果从命令行读取并解析到指定的interface,如例子中的name,age,我们有更好用的flag包可以使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值