context.Context, in <-chan Observation, out chan<- Frame) error { tick := time.NewTicker(time.Second) // 1秒毎のTick発生のため。毎秒で状態取得処理をさせるため defer tick.Stop() // ...中略... case o := <-in: s.apply(o) // ① データの書き込み・更新(次スライドで解説) case now := <-tick.C: s.evict(now) // ② 古い他船を落とす(15分更新がない船舶のデータを消す。なお基準は検討中) snap := s.snapshot(now) // ③ スナップショットとして現在のデータを切り出す(次スライドで解説) var alerts []Alert for _, d := range s.detectors { alerts = append(alerts, d.Detect(snap, now)...) // ④ 危険検知(逐次) } // ...後略... Go Conference 2026 59 2026年9月11日(金) 海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム