Это не имеет ничего общего с каналами.Проверьте этот код, который имеет тот же результат:
package main
import (
"fmt"
)
type myType struct {
myString string
}
func main() {
in := [2]myType{
myType{myString: "string1"},
myType{myString: "string2"},
}
var types []*myType
for _, element := range in {
types = append(types, &element)
}
for _, element := range types {
fmt.Println(element.myString)
}
}
Воспроизвести
Проблема в том, что вы берете указатель на element
, переменную, которая будетПолучайте новое значение каждый раз через цикл, , но сама переменная остается той же , поэтому все указатели, которые вы добавляете к точке среза, к одному и тому же значению.Чтобы это исправить, добавьте значения вместо указателей или создайте временной цикл в вашем цикле и вместо этого нажмите указатель на временное
var types []myType
for element := range queue {
types = append(types, element)
}
или
var types []*myType
for element := range queue {
tmp := element
types = append(types, &tmp)
}