週末使って、色々試した結果、「チャネルを返り値とするサブルーチンは、fatal error: all goroutines are asleep - deadlock! となる」ということでした。
# まあ、 select-caseで、メソッドを直接使いたい、という変則的な使い方でしたので、仕方ありませんが、
package main
import "fmt"
func channel_test() chan int {
ch := make(chan int)
ch <- 1
return ch
}
func main() {
v := channel_test()
fmt.Println(v)
// go channe_test()とすれば動く
}
こんな使い方を想定していました。
for{
select{
case v:= <-channel_test():
// do something
}
}
続報:
ネットの質問版で質問してみたら、
ch := make(chan int)を、ch := make(chan int, 1)としたら動くよ、と教えて頂き、動作確認できました。
お詫びして訂正致します。
package main
import (
"fmt"
"time"
)
func channel_test() chan int {
ch := make(chan int, 1)
ch <- 1
return ch
}
func main() {
v := channel_test()
fmt.Println(v)
// go channe_test()とすれば動く
for {
select {
case v := <-channel_test():
fmt.Println("case v := <-channel_test():", v)
}
time.Sleep(time.Second)
}
}
江端