Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fmt: Inconsistent behaviour between fmt.Print() and fmt.Println() when supplying multiple arguments #41798

Closed
scrouthtv opened this issue Oct 5, 2020 · 1 comment

Comments

@scrouthtv
Copy link

What version of Go are you using (go version)?

$ go version
go version go1.15.2 linux/amd64

Does this issue reproduce with the latest release?

Yes.

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/lenni/.cache/go-build"
GOENV="/home/lenni/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/lenni/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/lenni/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build557200308=/tmp/go-build -gno-record-gcc-switches"

What did you do?

I think fmt#Print and fmt#Println are pretty similar commands.
They can both print a series of objects by concatenating them.
However, Println puts a whitespace in between every parameter, which Print does not:
https://play.golang.org/p/wItyuCLSuSq

In the docs it says

Print: Spaces are added between operands when neither is a string.
Println: Spaces are always added between operands [...]

What did you expect to see?

I'd think for the two to behave the same, except that Println appends a newline character.

What did you see instead?

In the example I linked above, Println concats the two strings supplied by placing a whitespace in the middle.
On the other hand, Print does not put anything in between the two strings.

I noticed this inconsistency when changing calls to fmt.Println to fmt.Print in my codebase in order to increase readability.
I had to add many spaces which were not needed before.

My question is whether this is the supposed behaviour?

@randall77
Copy link
Contributor

This is the specified behavior. Even if we wanted to change it we can't because of the Go 1 compatibility guarantee.

@golang golang locked and limited conversation to collaborators Oct 5, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

3 participants