GO的interface{}和any有什么区别?Go的接口和java的接口有什么区别?

答:

  1. interface{}和any没有任何区别
  2. 区别如下:
GoJava
实现方式隐式实现显示实现
代码耦合松——定义接口的地方和使用接口的地方可以不在一个包紧——类必须显示声明实现了哪个接口

GO语言并发题:下面这段代码会输出什么?有没有问题?


  func main() {
      ch := make(chan int)

      go func() {
          for i := 0; i < 5; i++ {
              ch <- i
          }
      }()

      for val := range ch {
          fmt.Println(val)
      }

      fmt.Println("done")
  }

问题: 会输出 0 1 2 3 4,然后死锁
原因:

ch := make(chan int) // 无缓冲 channel

go func() {
for i := 0; i < 5; i++ {
ch <- i
}
// ⚠️ 这里没有 close(ch)!发送完就退出了
}()

for val := range ch { // range 会一直等 channel 被 close
fmt.Println(val)
}
// 到这里时,发送 goroutine 已退出,主 goroutine 还在等,
// 没有其他 goroutine 会往 ch 里写数据了 → 死锁

修复方式: 发送端发送完毕后主动 close

func main() {
    ch := make(chan int)

    go func() {
        for i := 0; i < 5; i++ {
            ch <- i
        }
        close(ch)  // ✅ 发送完关闭,通知接收方结束
    }()

    for val := range ch {
        fmt.Println(val)
    }

    fmt.Println("done")  // ✅ 能执行到这里
}