Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test Index out of range golang

Tags:

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.

like image 927
SeanDowney Avatar asked Mar 10 '15 15:03

SeanDowney


1 Answers

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.

like image 107
rob74 Avatar answered Sep 28 '22 05:09

rob74