Go doesn't require you to handle or pass an error upwards. You can call something that returns err and just ignore it, compiler won't care. The "if err != nil" thing is annoying too. Rust made the right compromise with !
If you ignore it that is the same as swallowing an exception which is also allowed with checked exceptions.
Which (at least the way it was done in Go) is ignoring 20 years of experience in programming language design.