Files
llgo/_demo/cchan/cchan.go

51 lines
834 B
Go
Raw Normal View History

2024-07-02 16:00:43 +08:00
package main
import (
"unsafe"
"github.com/goplus/llgo/internal/runtime"
)
const (
eltSize = int(unsafe.Sizeof(0))
)
func doChan(cap int) {
c := runtime.NewChan(eltSize, cap)
go func() {
v := 100
runtime.ChanSend(c, unsafe.Pointer(&v), eltSize)
}()
var ret int
runtime.ChanRecv(c, unsafe.Pointer(&ret), eltSize)
println(ret)
}
func main() {
doChan(10)
2024-07-02 19:49:00 +08:00
doChan(0)
2024-07-02 20:23:48 +08:00
c := runtime.NewChan(eltSize, 3)
v := 1
runtime.ChanSend(c, unsafe.Pointer(&v), eltSize)
v = 2
runtime.ChanSend(c, unsafe.Pointer(&v), eltSize)
v = 3
runtime.ChanSend(c, unsafe.Pointer(&v), eltSize)
runtime.ChanClose(c)
v = 10
2024-07-06 21:59:28 +08:00
2024-07-02 20:23:48 +08:00
if runtime.ChanTrySend(c, unsafe.Pointer(&v), eltSize) {
println("error: chan send to closed chan")
}
for {
if ok := runtime.ChanRecv(c, unsafe.Pointer(&v), eltSize); !ok {
break
}
println(v)
}
2024-07-02 16:00:43 +08:00
}