この意味不明なコードは何なんだ?
と思ったら、Go言語の仕様上、struct{}はゼロサイズのデータを表すものとのこと。
つまりメモリを消費しないものを表している。
ただし、変数やチャネルで使用した場合、これらを管理するためのメモリは当然消費される。
チャネルで使用する場合、目的はデータのやり取りで無く、ゴルーチンの同期が目的になる。
package main
import (
"fmt"
"time"
)
func main() {
doneCh := make(chan struct{})
go func() {
time.Sleep(2 * time.Second) // 何かの処理を模擬
close(doneCh) // 処理が終了したらチャネルを閉じる
}()
fmt.Println("Waiting for the goroutine to finish...")
<-doneCh // チャネルが閉じられるまで待つ
fmt.Println("The goroutine has finished!")
}