• 标准库之fmt


    1、格式化输出的占位符

        //Printf 格式化输出
        fmt.Printf("% + v\n", u)     //格式化输出结构
        fmt.Printf("%#v\n", u)       //输出值的 Go 语言表示方法
        fmt.Printf("%T\n", u)        //输出值的类型的 Go 语言表示
        fmt.Printf("%t\n", true)     //输出值的 true 或 false
        fmt.Printf("%b\n", 1024)     //二进制表示
        fmt.Printf("%c\n", 11111111) //数值对应的 Unicode 编码字符
        fmt.Printf("%d\n", 10)       //十进制表示
        fmt.Printf("%o\n", 8)        //八进制表示
        fmt.Printf("%q\n", 22)       //转化为十六进制并附上单引号
        fmt.Printf("%x\n", 1223)     //十六进制表示,用a-f表示
        fmt.Printf("%X\n", 1223)     //十六进制表示,用A-F表示
        fmt.Printf("%U\n", 1233)     //Unicode表示
        fmt.Printf("%b\n", 12.34)    //无小数部分,两位指数的科学计数法6946802425218990p-49
        fmt.Printf("%e\n", 12.345)   //科学计数法,e表示
        fmt.Printf("%E\n", 12.34455) //科学计数法,E表示
        fmt.Printf("%f\n", 12.3456)  //有小数部分,无指数部分
        fmt.Printf("%g\n", 12.3456)  //根据实际情况采用%e或%f输出
        fmt.Printf("%G\n", 12.3456)  //根据实际情况采用%E或%f输出
        fmt.Printf("%s\n", "wqdew")  //直接输出字符串或者[]byte
        fmt.Printf("%q\n", "dedede") //双引号括起来的字符串
        fmt.Printf("%x\n", "abczxc") //每个字节用两字节十六进制表示,a-f表示
        fmt.Printf("%X\n", "asdzxc") //每个字节用两字节十六进制表示,A-F表示
        fmt.Printf("%p\n", 0x123)    //0x开头的十六进制数表示
    

    2、Stringer 接口

    Stringer接口的定义如下:

    type Stringer interface {
            String() string
        }
    

    示例:

    type Person struct {
            Name string
            Age  int
            Sex  int
        }
    //为Person增加String方法
    func (this *Person) String() string {
            buffer := bytes.NewBufferString("This is ")
            buffer.WriteString(this.Name + ", ")
            if this.Sex == 0 {
                buffer.WriteString("He ")
            } else {
                buffer.WriteString("She ")
            }
    
            buffer.WriteString("is ")
            buffer.WriteString(strconv.Itoa(this.Age))
            buffer.WriteString(" years old.")
            return buffer.String()
        }
    

    3、Formatter 接口

    Formatter 接口的定义如下:

    type Formatter interface {
            Format(f State, c rune)
        }
    

    通过实现 Formatter 接口可以做到自定义输出格式(自定义占位符)。

    示例:

        type Person struct {
            Name string
            Age  int
            Sex  int
        }
    
        func (this *Person) Format(f fmt.State, c rune) {
            if c == 'L' {
                f.Write([]byte(this.String()))
                f.Write([]byte(" Person has three fields."))
            } else {
                // 没有此句,会导致 fmt.Printf("%s", p) 啥也不输出
                f.Write([]byte(fmt.Sprintln(this.String())))
            }
        }
    
        func main(){
            p := &Person{"polaris", 28, 0}
            fmt.Printf("%L", p)
        }
    

    注意:

    1)fmt.State 是一个接口。由于 Format 方法是被 fmt 包调用的,它内部会实例化好一个 fmt.State 接口的实例,我们不需要关心该接口;

    2)可以实现自定义占位符,同时 fmt 包中和类型相对应的预定义占位符会无效。因此例子中 Format 的实现加上了 else 子句;

    3)实现了 Formatter 接口,相应的 Stringer 接口不起作用。但实现了 Formatter 接口的类型应该实现 Stringer 接口,这样方便在 Format 方法中调用 String() 方法。就像本例的做法;

    4)Format 方法的第二个参数是占位符中%后的字母(有精度和宽度会被忽略,只保留字母);

    4、GoStringer 接口

    GoStringer 接口定义如下:

        type GoStringer interface {
            GoString() string
        }
    

    该接口定义了类型的Go语法格式。用于打印(Printf)格式化占位符为 %#v 的值。

    示例:

        type Person struct {
            Name string
            Age  int
            Sex  int
        }
    
        func (this *Person) GoString() string {
            return "&Person{Name is "+this.Name+", Age is "+strconv.Itoa(this.Age)+", Sex is "+strconv.Itoa(this.Sex)+"}"
        }
    

    参考:fmt — 格式化 IO · Go语言标准库 (studygolang.com)

  • 相关阅读:
    常用的系统存储过程
    考勤信息(员工打卡)
    项目经理评分(评价)
    体验套餐管理系统
    C#中简单的继承和多态
    面向对象的七个设计原则
    office 2010 安装时出错 MSXML版本6.10.1129.0
    phpstorm + Xdebug断点调试PHP
    wamp server 3.0.0 修改默认浏览器,软件语言和配置文件编辑器
    vue.js指令v-model实现方法
  • 原文地址:https://www.cnblogs.com/mango1997/p/16305831.html
Copyright © 2020-2023  润新知