• 漫谈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包可以使用

  • 相关阅读:
    Harbor
    Ansible自动化部署详细教程
    企业级-Shell案例18——目录入侵检测与告警
    企业级-Shell案例17——DOS攻击防范(自动屏蔽攻击IP)
    企业级-Shell案例16——自动发布PHP项目
    springboot启动报错,Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    IO流05--毕向东JAVA基础教程视频学习笔记
    IO流04--毕向东JAVA基础教程视频学习笔记
    IO流03--毕向东JAVA基础教程视频学习笔记
    IO流02--毕向东JAVA基础教程视频学习笔记
  • 原文地址:https://www.cnblogs.com/linyihai/p/10727308.html
Copyright © 2020-2023  润新知