gofmt: expected declaration, found ')'

592 views
Skip to first unread message

Andreas Götz

unread,
Apr 16, 2023, 10:17:30 AM4/16/23
to golang-nuts
Good morning. Please excuse me for asking here- I'm stuck with something that looks like a gofmt bug though that seems very unlikely.

In CI (https://github.com/evcc-io/evcc/actions/runs/4712710735/jobs/8357929411?pr=7485) I'm using a "porcelain" step to make sure only go-fmt'ed sources are checked in:

gofmt -w -l $(find . -name '*.go')

This step fails with: expected declaration, found ')' on this line which seems lengthy but perfectly valid:

func decorateKeba(base *Keba, meter func() (float64, error), meterEnergy func() (float64, error), phaseCurrents func() (float64, float64, float64, error), phaseVoltages func() (float64, float64, float64, error), phaseSwitcher func(int) error) api.Charger {
...
}

Funny enough, the error happens on CI only. I've recently noticed that Go issues had identified and fixed a mis-compile error and I'm wondering if that (or similar) might be hitting here due to wrong binary code?

Any thoughts?

Jan Mercl

unread,
Apr 16, 2023, 10:31:22 AM4/16/23
to Andreas Götz, golang-nuts
It's not enough to show the place of error, the preceding context may
cause it. Can you provide the whole file? Your snippet formats just
fine: https://go.dev/play/p/3GqFunldeq0

Andreas Götz

unread,
Apr 16, 2023, 10:34:12 AM4/16/23
to golang-nuts
The entire file is https://raw.githubusercontent.com/evcc-io/evcc/a5f7bb0100c4427a2f611f82b742f56a449681de/charger/keba-modbus_decorators.go, part of https://github.com/evcc-io/evcc/pull/7485.

Seems entirely find to me and works locally which makes it so confusing. Also formats fine: https://go.dev/play/p/XhoSAFjpGXa 

Axel Wagner

unread,
Apr 16, 2023, 10:44:24 AM4/16/23
to Andreas Götz, golang-nuts
I can't tell what version of gofmt is used? It does not seem to be manually installed, so I assume it is the one that comes with the image. Is it possible that's too old? I don't know why that would matter here, though, the code doesn't seem to be using any new language features.

--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/0dd15d6e-a01c-4815-a09c-9970e0f78b32n%40googlegroups.com.

Andreas Götz

unread,
Apr 16, 2023, 10:52:10 AM4/16/23
to golang-nuts
Isn't gofmt ist part of the go command? Go ist the latest version:

Setup go version spec ^1.20
Found in cache @ /opt/hostedtoolcache/go/1.20.3/x64
Added go to the path
Successfully set up Go version ^1.20
/opt/hostedtoolcache/go/1.20.3/x64/bin/go env GOMODCACHE
/opt/hostedtoolcache/go/1.20.3/x64/bin/go env GOCACHE
/home/runner/go/pkg/mod
/home/runner/.cache/go-build
Received 6992475 of 6992475 (100.0%), 10.2 MBs/sec
Cache Size: ~7 MB (6992475 B)
/usr/bin/tar -z -xf /home/runner/work/_temp/e939bf11-065d-4635-b10d-f083acd759cc/cache.tgz -P -C /home/runner/work/evcc/evcc
Cache restored successfully
Cache restored from key: setup-go-Linux-go-1.20.3-bb2ad7483b6059140940174a6d0146cd74cffa8dfe8f7aab3d2c995468e83809
go version go1.20.3 linux/amd64

Jan Mercl

unread,
Apr 16, 2023, 11:02:31 AM4/16/23
to Andreas Götz, golang-nuts
On Sun, Apr 16, 2023 at 12:51 PM Andreas Götz <andrea...@gmail.com> wrote:

> Isn't gofmt ist part of the go command? Go ist the latest version:

It is but it's a separate binary/executable file. Go version is one thing, the version of the binary file that is actually executed when '$ gofmt' is invoked is another thing, not necessarily related for many possible reasons, like alias, $PATH etc.

Try to check by issuing something like:

jnml@3900x:~$ go version -m $(which gofmt)
/home/jnml/bin/gofmt: go1.18.5
path cmd/gofmt
jnml@3900x:~$

Andreas Götz

unread,
Apr 16, 2023, 11:19:47 AM4/16/23
to golang-nuts
Forgive me. I have overlooked the fact, that this is a generated file that gets regenerated on the CI. Only in this case it must not since the generator does not cover a specific case and needs manual touch-up, hence must not be modified afterwrds.

Sorry for the noise and wish you a nice Sunday!

Reply all
Reply to author
Forward
0 new messages