fmt.Println打印出%s之类的格式动词

I've written code that is intended to print out keys and values in a map.

kvs := map[string]string{"a": "apple", "b": "banana"}
for k, v := range kvs {
    fmt.Println("%s -> %s
", k, v)
}

I'm expecting the output to be:

a -> apple
b -> banana

But the output is actually:

%s -> %s
a apple
%s -> %s
b banana

It looks like you are trying to use string formatters, which aren't supported by fmt.Println.

According to the godocs:

Printf formats according to a format specifier

whereas

Println formats using the default formats

The following will give the output you are trying to get:

package main

import "fmt"

func main() {
    kvs := map[string]string{
        "a": "apple",
        "b": "banana",
    }
    for k, v := range kvs {
        fmt.Printf("%s -> %s
", k, v)
    }
}

Note that maps in Go do not have a specific ordering so you may get any arbitrary key-value pair before another.

You are using the wrong printing function.

I) Try to replace Println with Printf and it should work fine.

II) Another option is to first format the string s := fmt.Sprintf("a %s", "string") and then print it fmt.Println(s).

reference: Go by Example: String Formatting