golangでのキャストのやりかた
C/C++では、構造体を丸ごと送信するのに、文字列にキャストを被せて無理矢理送り込むということをやっていました。
Goの場合、チャネルに ch chan interface{}を使うと、何でも運んでくれるようなので、これで同じように「手を抜く」を考えていました。
で、色々試した結果、こういう風に使えるらしいので自分用のメモとして残しておきます
// 単一通信の構造体
type SingleCaster struct {
//ch chan int // 単一通信路
ch chan interface{}
lock sync.Mutex // 単一通信路のロック
}
でもって、
type locInfo struct {
lon float64
lat float64
}
でもって、
type PERSON struct {
number int // 人間番号
live bool // 存在フラグ 存在:true 消滅:false
destination locInfo // 出発座標
arrival locInfo // 到着座標
distance float64 // 到着座標と出発座標の距離
present locInfo // 現在位置
}
を、こんな風に運びたい時、
sc_person.ch <- person.present
これで、元に戻ります。
case v_p := <-sc_person.ch:
fmt.Println("catched from person send", v_p)
//var ll locInfo
ll := v_p.(locInfo)
fmt.Println(ll.lon, ll.lat)
channelで構造体を送り込む方法
var ch1 chan interface{}
type PERSON struct {
number int // 人間番号
action int // 0:リクエスト 1:乗車 2:降車
}
func sub1(){
var person PERSON
person.number = 1
person.action= 2
ch1 <- person
}
func sub2(){
p := <-ch1
person := p.(PERSON)
fmt.Println(person)
}