Go “是否有目的?”;制造;在一个单向的频道上播放?

Go “是否有目的?”;制造;在一个单向的频道上播放?,go,Go,注:这不是重复的问题,因为我知道你们什么时候会使用单向通道。我一直这样做。我的问题是为什么该计划有效: func main() { ch := make(chan<- int) ch <- 5 fmt.Println("Hello, playground") } 但这更容易实现,更不用说不那么令人困惑了,可以通过许多不同的结构来实现 这只是对类型系统的一种怪癖/疏忽,还是我没有想到这种行为有什么用处?你有一种语言:单词(标记)和语法。你总是可以写一些有道理的

注:这不是重复的问题,因为我知道你们什么时候会使用单向通道。我一直这样做。我的问题是为什么该计划有效:

func main() {
    ch := make(chan<- int)
    ch <- 5
    fmt.Println("Hello, playground")
}
但这更容易实现,更不用说不那么令人困惑了,可以通过许多不同的结构来实现


这只是对类型系统的一种怪癖/疏忽,还是我没有想到这种行为有什么用处?

你有一种语言:单词(标记)和语法。你总是可以写一些有道理的废话:蓝色不是一种颜色

你写了一些有道理的废话:

package main

func main() {
    ch := make(chan<- int)
    ch <- 5
}
package main

func main() {
    for {
    }
}

我相信Go的设计目标之一就是简单。语言规范非常简短。我相信这可能是一个以无意义构造为代价的简单性的例子。@ReyCharles我接受这一点,因为我认为这是你永远不想做的事情。(或者,至少,有人想出了它的用途,就赢得了今天的围棋酒吧琐事™.) 但是按照@ReyCharles所说的,规范并不需要排除所有无意义的构造。Go试图防止C不存在的某些形式的无意义(例如,未使用的变量);Rust有静态检查,试图排除一些无意义的Go编译(例如,种族).没关系,我们对偶尔出现的怪事都会咯咯地笑,然后继续努力制造东西。
package main

func main() {
    for {
    }
}