fmt.Append formats spaces between non-string operands, but doesn't mentiond this in its doc:

Append formats using the default formats for its operands, appends the result to the byte slice, and returns the updated slice.

https://github.com/golang/go/blob/66536242fce34787230c42078a7bbd373ef8dcb0/src/fmt/print.go#L285-L286

At the same time fmt.Sprint() documentation is very specific about it:

Sprint formats using the default formats for its operands and returns the resulting string. Spaces are added between operands when neither is a string.

As a result, it makes false impression that formatting will be different, but it will format values the same way, only buffer operations are different:

func Sprint(a ...any) string {
    p := newPrinter()
    p.doPrint(a)
    s := string(p.buf)
    p.free()
    return s
}

func Append(b []byte, a ...any) []byte {
    p := newPrinter()
    p.doPrint(a)
    b = append(b, p.buf...)
    p.free()
    return b
}

Comment From: gabyhelp

Related Issues

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

Comment From: cherrymui

cc @robpike @martisch

Comment From: gopherbot

Change https://go.dev/cl/688877 mentions this issue: fmt: document space behavior of Append

Comment From: robpike

This should be addressed by updating all the docs to includ the Append(|f|ln) functions in the discussions about Print, Sprint and so on. Just edit the doc comments for those functions is insufficient.

This should have been done when the functions were added.