Sorry for this noob question, but I'm not sure how I test to see if an element I'm accessing is valid for an array, consider the following contrived code:
func main() { strings := []string{"abc", "def", "ghi", "jkl"} for i := 0; i<5; i++ { if strings[i] { fmt.Println(strings[i]) } } }
https://play.golang.org/p/8QjGadu6Fu
I'm obviously going outside of the bounds, but I'm not sure how I test to prevent the error. I'm used to PHP where I would use an isset
or !empty
test, does go have such a thing?
I've browsed other questions and seen the len
function used, but that doesn't appear to work.
In Go, this is not quite as easy as in PHP - but keep in mind that in PHP it's only easy because "indexed" arrays are actually associative arrays under the hood. Otherwise you wouldn't be able to "punch holes" into arrays by unsetting individual elements.
With Go arrays/slices, you have to actually check against the length of the array, as you wrote:
if i>=0 && i<len(strings) {...}
Personally, I've yet to come across a real life situation that requires doing this - in your example, you could use range(strings)
and stop worrying about indexes.
With maps, which are the Go equivalent of PHP arrays, you can do "isset" by writing:
value, isset := map[index]
if index
is present in the map, value
will be set appropriately and isset
will be true; if not, value
will be set to the zero value of the map's type and isset
will be false.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With