Немного модифицировал вашу программу для лучшего чтения.
package main
import "fmt"
import "sync"
func producer(jobs chan []int, wg *sync.WaitGroup) {
defer wg.Done()
a := make([]int, 2)
a[0] = 1
a[1] = 2
jobs <- a //We are passing memory location of slice ( is nature of slice ), so the values changing next line will affect here too
a[0] = 2
a[1] = 3
jobs <- a
close(jobs)
}
func main() {
var wg sync.WaitGroup
wg.Add(1)
jobs := make(chan []int, 2)
go producer(jobs, &wg)
for job := range jobs {
fmt.Printf("job: %+v\n", job)
}
wg.Wait()
}
Та же программа, которую я пробовал с массивом, тогда мы получим ожидаемый вами результат, см. Код ниже
package main
import "fmt"
import "sync"
func producer(jobs chan [2]int, wg *sync.WaitGroup) {
defer wg.Done()
var a[2]int
a[0] = 1
a[1] = 2
jobs <- a
a[0] = 2
a[1] = 3
jobs <- a
close(jobs)
}
func main() {
var wg sync.WaitGroup
wg.Add(1)
jobs := make(chan [2]int)
go producer(jobs, &wg)
for job := range jobs {
fmt.Printf("job: %+v\n", job)
}
wg.Wait()
}
Playground Link - Программа с использованием Slice
Playground Link - Программа с использованием Array
Основное правило - слайсы передаются по ссылке