Re:Errors in Go: From denial to acceptance
by Skunkleton on Monday November 26, 2018 @03:41PM
(#18536613)
But wouldn't that look like:
Where is the unhandled error?
[ Parent
| on HN ]
Re:Errors in Go: From denial to acceptance
by TheDong on Monday November 26, 2018 @05:50PM
(#18537585)
Note that your code will not work; you've shadowed 's' inside the if block because you have 'if s, err := ...'. As a result, 's = defaults()' will set the shadowed 's' variable that only exists within the if block to defaults, but the 'var s Settings' you declared above will not be modified.
Here's a playground showing the issue: https://play.golang.org/p/eE0HEZx1MJu
Go is full of nice little foot-guns like that :)
You would want to also have 'var err error' above the block and use '=' instead of ':=' to fix this sort of issue.
Re:Errors in Go: From denial to acceptance
by Skunkleton on Tuesday November 27, 2018 @09:55PM
(#18548914)
I am by no means an expert (or even a frequent user) of go. However, the most unfortunate foot cannon I have encountered is this:
package main
type HowOdd interface {
Poke() string
}
type AConcreteThing struct {
}
func (t *AConcreteThing) Poke() string { return "hehe" }
func DoAConcreteThing() *AConcreteThing {
return nil
}
func DoAThing() HowOdd {
return DoAConcreteThing()
}
func main() {
lolWhat := DoAThing()
if lolWhat != nil {
panic("How could this happen?")
}
}
I understand that the interface at the bottom is a non-null interface containing a null value, but...damn, that sucks.