I’ve been spending the last few weeks learning Go by reading Learning Go by Jon Bodner, so far I’ve been enjoying learning about Go, though there is still one thing I keep tripping over, in Go, you can return one or more values, for me Go is the first language that I have worked with that does that, in every other language I had to introduce a custom discriminating union to achieve what Go does natively.
Take the following Go code.
|
|
Most of it can be understood even by those that have never worked with Go, the part that I was having a rough time understanding was the if statement below.
|
|
I wasn’t understanding how the variable “ok” could evaluate to true, I’ve worked so much with C# that my brain naturally tried to read the code as if it were C#, and in C# like many other objection-oriented languages you can only return one value. Looking at the official docs I found the following note under Index Expression.
An index expression on a map of type map[K]V used in an assignment statement or initialization of the special form yields an additional untyped boolean value. The value of ok is true if the key x is present in the map, and false otherwise.
In other words, in the example above if target minus sum yields a value, that value is assigned to the variable pos, and the untyped boolean value is assigned to the variable “ok”, then the variable “ok” is evaluated.