golang channl的语法要是这样的该多好

有没有觉得go官方的channel操作语法可读性很差,我觉得这样更好:

// 定义和初始化chan保持不变
a := make(chan int, 10) 

// 读取chan有2种方式
v := rchan(a)
v, ok := rchan(a)

// 写入chan只有1种方式
wchan(a, 1)

// 定义形参类型有3种方式
func dryChan(a chan int)   // 可读可写
func setChan(a wchan int)  // 只可写
func getChan(a rchan int)  // 只可读
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 5

Golang 的类型系统不支持,返回值还需要做类型断言

1年前 评论

第一版本

type Ch[T any] struct {
    myCh chan T
}

func newCH[T any](lenght int) Ch[T] {
    return Ch[T]{make(chan T, lenght)}
}

func (itself *Ch[T]) Set(data T) {
    itself.myCh <- data
}

func (itself *Ch[T]) Get() T {
    return <-itself.myCh
}

func main() {
    mych := newCH[int](1)
    mych.Set(1)
    data := mych.Get()
    fmt.Println(data)
}
1年前 评论

这一份代码单独放一个库,就可以满足了。只写了只读写的部分,读写都可以的部分自行实现就好。


type OnlyRead[chanT any, T chan chanT] struct {
    myCh T
}

func (itself *OnlyRead[T, chanT]) Read() T {
    return <-itself.myCh
}

type OnlyWrite[chanT any, T chan chanT] struct {
    myCh T
}

func (itself *OnlyWrite[T, chanT]) Write(data T) {
    itself.myCh <- data
}

func newORD[chanT any, T chan chanT](ch T) (OnlyRead[chanT, T], OnlyWrite[chanT, T]) {
    return OnlyRead[chanT, T]{ch}, OnlyWrite[chanT, T]{ch}
}

func demo2() {
    or, ow := newORD(make(chan string, 10))
    ow.Write("nihaonihao")
    fmt.Println(or.Read())
}
1年前 评论

其实底层实现也是通过调用函数,<- 和 -> 类似语法糖

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!