只要一个类型,实现了一个接口的任意方法,都能隐式转换为该接口类型 可以看下具体的代码 // io.go // io.Writer 接口定义 type Writer interface { Write(p []byte) (n int, err error) } // file.go // File结构体write方法 func (f *File) Write(b []byte) (n int, err error) { // ....... }
后面会有,n判断buffer里是否还有数据,之后会对没有的情况做处理
是覆盖了,覆盖了8个字节,刚好是一个int。然后这个buffer转成int,并由out channel 发送出去
查了些资料 有的网上写的是int在64位操作系统也只占4 byte,所以有点懵。不过这里应该是默认的int_64所以是8字节
向channel写入或者读取数据都是阻塞的,不开goroutine的话代码上面的代码就阻塞在 out <- r , 当然就死锁了。开gouroutine的话应该不会吧,你可以贴下代码看看
ctrl+alt+M
没有flush吧?
defer的效果是从最后向前依次执行需要defer的语句,也就说需要defer操作的引用都会被存储在一个栈空间。
在栈空间里file指向的地址还是不同的地址,因此可以解决这个问题。
猜测是这样,并没有实际证据。
老师讲了 可能出错了 但是还读到了几个字节 不能扔掉
显式类型转换:uint64,全部作为无符号整型处理
快捷键的名字叫extract -> variable
快捷键的名字叫extract -> method