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

@scrouthtv scrouthtv commented Oct 5, 2020

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

@randall77 randall77 commented Oct 5, 2020

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

@scrouthtv scrouthtv closed this Oct 5, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
You can’t perform that action at this time.