Passing a refference into a function


(cinematik) #1

https://play.golang.org/p/36HbIQRXQAm

I need to pass a refference of slice into a function but something is wrong because iterating over slice doesn’t output any data.

package main

import (
	"fmt"
)

func main() {

	timeMarkers := []string{}

	go timeMarkersSearch(&timeMarkers)

	for _, marker := range timeMarkers {
		fmt.Println(marker)
	}

}

func timeMarkersSearch(timeMarkers *[]string) {
	s1 := "s1"
	s2 := "s2"
	*timeMarkers = append(*timeMarkers, s1)
	*timeMarkers = append(*timeMarkers, s2)
}

(Norbert Melzer) #2

There is nothing wrong, but main prints the empty slice before the goroutine is able to add any elements.

You can either remove the go or use a sync.WaitGroup to synchronize your go routines as I did on the playground


(Inanc Gumus) #3

You don’t need to use sync.WaitGroup for that. You can simply use a done channel. Here’s the refactored code.

I also think that you may want to use channels instead, like this.