Я пытаюсь более полно понять природу взаимоотношений между каналами и другими общими состояниями. В частности, я хочу посмотреть, создается ли какая-то граница памяти на операции отправки и получения канала.
Например, если я отправляю сообщение на канале, выполняю все другие операции, связанные с изменением общего состояния "произойдет до «отправки / получения». В моем конкретном примере я всегда пишу только из одной процедуры, а затем читаю из одной процедуры.
(Кроме того, очевидный ответ в приведенном ниже примере - поместить экземпляр Person
структурировать канал напрямую, но я не об этом.)
package main
func main() {
channel := make(chan int, 128)
go func() {
person := &sharedState[0]
person.Name = "Hello, World!"
channel <- 0
}()
index := <-channel
person := sharedState[index]
if person.Name != "Hello, World!" {
// unintended race condition
}
}
type Person struct{ Name string }
var sharedState = make([]Person, 1024)