• 漫谈golang之fmt格式化模块


    fmt 漫谈

    Go Walkthrough: 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: 
    %#v
    ", myComputer)
        fmt.Printf("my computer is: 
    %v
    ", 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
    ", name)
    fmt.Printf("Your age is: %d
    ", age)
    

    执行交互

    $ go run main.go
    Jane 25
    Your name is: Jane
    Your age is: 25
    

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

  • 相关阅读:
    SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载)
    SpringCloud -创建统一的依赖管理
    Mysql、Oracle、SQLServer等数据库参考文档免费分享下载
    DevExpress的图形按钮菜单栏控件WindowsUIButtonPanel的布局、使用和设置按钮的点击事件
    Winform中设置ZedGraph鼠标滚轮缩放的灵敏度以及设置滚轮缩放的方式(鼠标焦点为中心还是图形中心点)
    Winform中设置多条Y轴时新增的Y轴刻度不显示问题解决
    Winforn中设置ZedGraoh的GraphPane恢复到初始比例大小
    Winform中设置ZedGraph多条Y轴时与多条曲线一一对应
    Winform中设置ZedGraph多条Y轴时坐标轴左右显示设置
    一、关于a标签伪类中的visited不起作用问题
  • 原文地址:https://www.cnblogs.com/linyihai/p/10727308.html
Copyright © 2020-2023  润新知