zoukankan      html  css  js  c++  java
  • 格式化输入输出

    格式化输入输出

    fmt包实现了类似C语言printf和scanf的格式化I/O,对应函数为:Printf和Scanf。

    详见:https://golang.google.cn/pkg/fmt/

    格式化 输出

    普通占位符

    占位符     说明                           举例                   输出
    %v        相应值的默认格式。             Printf("%v", people)   {randy},
    %+v       打印结构体时,会添加字段名      Printf("%+v", people)  {Name:randy}
    %#v       相应值的Go语法表示            Printf("#v", people)   main.Human{Name:"randy"}
    %T        相应值的类型的Go语法表示       Printf("%T", people)   main.Human
    %%        字面上的百分号,并非值的占位符   Printf("%%")            %
    

    示例

    package main
    
    import "fmt"
    
    func main()  {
        var x interface{} = struct {
            name string
            age  int
        }{"randy", 18}
        fmt.Printf("%v
    ",x)
        fmt.Printf("%+v
    ",x)
        fmt.Printf("%#v
    ",x)
        fmt.Printf("%T
    ",x)
        fmt.Printf("%v%%
    ",100)
    }
    

    输出

    {randy 18}
    {name:randy age:18}
    struct { name string; age int }{name:"randy", age:18}
    struct { name string; age int }
    100%
    

    布尔占位符

    占位符       说明                举例                     输出
    %t          true 或 false       Printf("%t", true)      true
    

    整数占位符

    占位符     说明                                  举例                       输出
    %d      十进制表示                             Printf("%d", 0x12)          18
    %b      二进制表示                             Printf("%b", 5)             101
    %o      八进制表示                             Printf("%d", 10)            12
    %x      十六进制表示,字母形式为小写 a-f          Printf("%x", 13)             d
    %X      十六进制表示,字母形式为大写 A-F          Printf("%x", 13)             D
    
    
    %c      相应Unicode码点所表示的字符               Printf("%c", 0x4E2D)        中
    %q      单引号括起来的字符字面值,由Go语法安全地转义  Printf("%q", 0x4E2D)       '中'
    %U      Unicode格式:U+1234,等同于 "U+%04X"     Printf("%U", 0x4E2D)       U+4E2D
    

    示例

    package main
    
    import "fmt"
    
    func main()  {
        fmt.Printf("%c
    ",0x4e0a)  // 输出unicode码对应的字符->上
        fmt.Printf("%q
    ",0x4e0a)  // 输出unicode码对应的字符->'上'
        fmt.Printf("%U
    ",0x4e0a)  // 输出unicode格式的数字->U+4E0A
    
    }
    

    输出

    上
    '上'
    U+4E0A
    

    浮点数、复数的组成部分(实部和虚部)

    占位符     说明                              举例            输出
    %b      无小数部分,二进制指数的科学计数法,Printf("%b
    ",a)
            与 strconv.FormatFloat 的 'b' 转换格式一致。例如 -123456p-78
    %e      科学计数法,例如 -1234.456e+78        Printf("%e", 10.2)     1.020000e+01
    %E      科学计数法,例如 -1234.456E+78        Printf("%e", 10.2)     1.020000E+01
    %f      有小数点而无指数,例如 123.456        Printf("%f", 10.2)     10.200000
                                              Printf("%.1f", 10.35)   10.4
        
    fmt.Printf("%8f
    ", math.Pi)
    fmt.Printf("%8.3f
    ", math.Pi) // 总宽度为8,保留3位小数,不够在左侧填充空格
    
    
    %g      根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出 Printf("%g", 10.20)   10.2
    %G      根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)输出 Printf("%G", 10.20+2i) (10.2+2i)
    

    字符串与字节切片

    占位符     说明                              举例                           输出
    %s      输出字符串表示(string类型或[]byte)   Printf("%s", []byte("Go语言"))  Go语言
    %q      双引号围绕的字符串,由Go语法安全地转义  Printf("%q", "Go语言")         "Go语言"
    %x      十六进制,小写字母,每字节两个字符      Printf("%x", "golang")         676f6c616e67
    %X      十六进制,大写字母,每字节两个字符      Printf("%X", "golang")         676F6C616E67
    

    指针

    指针
    占位符         说明                      举例                             输出
    %p            十六进制表示,前缀 0x       
    
    
    name:="randy"
    fmt.Printf("%p
    ", &name)  // 0xc000010200
    
    var x *int
    fmt.Printf("%p
    ", x)  // 0x0
    

    其他标记

    其它标记
    占位符      说明                             举例          输出
    +      总打印数值的正负号;对于%q(%+q)保证只输出ASCII编码的字符。 
                                               Printf("%+q", "中文")  "u4e2du6587"
    -      在右侧而非左侧填充空格(左对齐该区域)
    #      备用格式:为八进制添加前导 0(%#o)      Printf("%#U", '中')      U+4E2D
           为十六进制添加前导 0x(%#x)或 0X(%#X),为 %p(%#p)去掉前导 0x;
           如果可能的话,%q(%#q)会打印原始 (即反引号围绕的)字符串;
           如果是可打印字符,%U(%#U)会写出该字符的
           Unicode 编码形式(如字符 x 会被打印成 U+0078 'x')。
    ' '    (空格)为数值中省略的正负号留出空白(% d);
           以十六进制(% x, % X)打印字符串或切片时,在字节之间用空格隔开
    0      填充前导的0而非空格;对于数字,这会将填充移到正负号之后
    
    

    golang没有 '%u' 点位符,若整数为无符号类型,默认就会被打印成无符号的。

    宽度与精度的控制格式以Unicode码点为单位。宽度为该数值占用区域的最小宽度;精度为小数点之后的位数。 操作数的类型为int时,宽度与精度都可用字符 '*' 表示。

    对于 %g/%G 而言,精度为所有数字的总数,例如:123.45,%.4g 会打印123.5,(而 %6.2f 会打印123.45)。

    %e 和 %f 的默认精度为6

    对大多数的数值类型而言,宽度为输出的最小字符数,如果必要的话会为已格式化的形式填充空格。

    而以字符串类型,精度为输出的最大字符数,如果必要的话会直接截断。

    print与println

    fmt.Print

    // 逗号分隔开的待输出的内容称之为Print功能的操作数
    // Print会使用操作数据默认的打印格式并写入标准输出(写入标准输出即输出到屏幕上),即输出内容默认的样子
    // 如果逗号分隔开的两个操作数都不是字符串,则在操作数之间添加空格
    // Print函数的返回值有两个,第一个是输出的字节个数,第二个则是写入标准输出时发生的错误信息
    res,_ := fmt.Print("he","llo",1,2,3) // hello1 2 3 加上空格,总共10个字节,即res等于10
    fmt.Print("wor","ld")
    fmt.Print(res)
    
    // 输出
    hello1 2 3world10
    

    fmt.Println

    // Println与Print只有两点不同
    // 1、Println输出的操作数之间总是会加空格
    // 2、Println会在输出的内容后自动追加一个换行符
    res,_:=fmt.Println("he","llo",1,2,3) // 加上空格与追加的换行符,总共13个字节,即res等于13
    fmt.Println("wor","ld")
    fmt.Println(res)
    
    // 输出
    he llo 1 2 3
    wor ld
    13
    

    fmt.Printf格式化打印:%v:原样输出 %[n]v n=1代表取传入值的第一个,可以重复取

    fmt.Printf("%[1]v %[1]v %[2]v
    ","randy",18) // randy randy 18
    

    格式化输入

    使用fmt.Scanf来解析输入的字符串和数字

    // 方式一:fmt.Scanln
    var  name string
    var  age  byte
    var  sal  float32
    var ispass bool
    fmt.Println("请输入姓名:")
    //当程序只是到fmt.Scanln(&name)程序会停止执行等待用户输入
    fmt.Scanln(&name)
    fmt.Println("请输入年龄:")
    //当程序只是到fmt.Scanln(&age)程序会停止执行等待用户输入
    fmt.Scanln(&age)
    fmt.Println("请输入薪水:")
    //当程序只是到fmt.Scanln(&sal)程序会停止执行等待用户输入
    fmt.Scanln(&sal)
    fmt.Println("请输入是否通过:")
    //当程序只是到fmt.Scanln(&name)程序会停止执行等待用户输入
    fmt.Scanln(&ispass)
    fmt.Printf(" The name is:%s,age:%d,sal:%f, ispass :%t",name,age,sal,ispass)
    
    // 方式二:fmt.Scanf
    var a,b,c int // 事先声明好、确定好类型,输入的时候就往指定类型里填值
    fmt.Scanf("%v--%v--%v", &a, &b, &c) // 必须按格式输入:10--11--12
    fmt.Println(a, b, c) // 10 11 12
    

    占位符

    %e %E %f %F %g %G 效果相同,用于读取浮点数或复数类型
    %s %v 用在字符串时会读取空白分隔的一个片段
    

    示例

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        a, b, c := "", 0, 0
        fmt.Scanf("%s%c%d", &a, &b, &c)
        fmt.Println(a, b, c)
    }
    

    输出

    abc 1
    abc 32 1
    
    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    null in ABAP and nullpointer in Java
    SAP ABAP SM50事务码和Hybris Commerce的线程管理器
    Hybris service layer和SAP CRM WebClient UI架构的横向比较
    SAP ABAP和Linux系统里如何检查网络传输的数据量
    SAP CRM WebClient UI和Hybris的controller是如何被调用的
    SAP CRM和Cloud for Customer订单中的业务伙伴的自动决定机制
    SAP CRM WebClient UI和Hybris CommerceUI tag的渲染逻辑
    SAP BSP和JSP页面里UI元素的ID生成逻辑
    微信jsapi支付
    微信jsapi退款操作
  • 原文地址:https://www.cnblogs.com/randysun/p/15404723.html
Copyright © 2011-2022 走看看