• Rob Pike's avatar
    fmt.Printf: introduce notation for random access to arguments. · 7472ce0e
    Rob Pike authored
    This text is added to doc.go:
    
            Explicit argument indexes:
    
            In Printf, Sprintf, and Fprintf, the default behavior is for each
            formatting verb to format successive arguments passed in the call.
            However, the notation [n] immediately before the verb indicates that the
            nth one-indexed argument is to be formatted instead. The same notation
            before a '*' for a width or precision selects the argument index holding
            the value. After processing a bracketed expression [n], arguments n+1,
            n+2, etc. will be processed unless otherwise directed.
    
            For example,
                    fmt.Sprintf("%[2]d %[1]d\n", 11, 22)
            will yield "22, 11", while
                    fmt.Sprintf("%[3]*[2].*[1]f", 12.0, 2, 6),
            equivalent to
                    fmt.Sprintf("%6.2f", 12.0),
            will yield " 12.00". Because an explicit index affects subsequent verbs,
            this notation can be used to print the same values multiple times
            by resetting the index for the first argument to be repeated:
                    fmt.Sprintf("%d %d %#[1]x %#x", 16, 17)
            will yield "16 17 0x10 0x11".
    
    The notation chosen differs from that in C, but I believe it's easier to read
    and to remember (we're indexing the arguments), and compatibility with
    C's printf was never a strong goal anyway.
    
    While we're here, change the word "field" to "arg" or "argument" in the
    code; it was being misused and was confusing.
    
    R=rsc, bradfitz, rogpeppe, minux.ma, peter.armitage
    CC=golang-dev
    https://golang.org/cl/9680043
    7472ce0e
scan.go 30.1 KB