As said in Go documentation on Semicolons:
Like C, Go's formal grammar uses semicolons to terminate statements, but unlike in C, those semicolons do not appear in the source. Instead the lexer uses a simple rule to insert semicolons automatically as it scans, so the input text is mostly free of them.
Thus the presence of a semicolon at the end of a statement does not mean that a statement follows.
The rule raises a False Positive when a jump statement is followed by a semicolon:
The semicolon is superfluous but there is no dead code.