How to get rid of zero value in a int slice in Go?

  • A+

I am trying to find even numbers in a list of numbers, here is my attempt:

package main  import "fmt"  func main() {     nums := []int{1, 2, 3, 4, 5, 6, 7}     res := []int{}     for n := range nums {         if n%2 == 0 {             res = append(res, n)         }     }     fmt.Println(res) } 

It seems straightforward; however, when I run the program, I got the result

[0 2 4 6] 

Where does the zero come from? It must be from the empty slice res. How can I get rid of this zero?


for n := range nums {     // ... } 

n is not the elements of the nums slice, it is the index. So basically you tested and added the indices of the elements to your res result slice.

Instead do this:

for _, n := range nums {     // ... } 

With this change, output will be (try it on the Go Playground):

[2 4 6] 

This is detailed in Spec: For statements, For statements with range clause:

For each iteration, iteration values are produced as follows if the respective iteration variables are present:

Range expression                          1st value          2nd value  array or slice  a  [n]E, *[n]E, or []E    index    i  int    a[i]       E string          s  string type            index    i  int    see below  rune map             m  map[K]V                key      k  K      m[k]       V channel         c  chan E, <-chan E       element  e  E 


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: