第一次Go Challenge比赛,中国区只有3人参赛。

赛后收到邮件,是一个审阅者的反馈,“Feedback on the Go Challenge solutions”,摘录如下:

保持简单粗暴

  • 一个语义单元一个文件即可,不要像Java那样一个文件就一个类型定义
  • decoder.go 放解码相关的内容,而 drum.go 放 Pattern 和 Track 类型,以及 String()
  • 不要添加额外的类型,除非需要为其增加方法

Streaming 是个好概念

  • 许多代码基于io.Reader 和 io.Writer,包括都用到的encoding/binary
  • 有人直接将文件全部读到内存中,然后将[]byte封装到bytes.Reader里,这是不可取的,还不如直接使用打开的file,因为这就是一个 bytes.Reader
  • 建议阅读“Crossing Streams: a Love Letter to io.Reader”

了解标准库

  • 使用 io.LimitedReader 可以封装已有的io.Reader并设定最大长度来读取,结合上面提到的直接使用io.Reader更简单粗暴

Errors are values

  • 没必要不停地做错误检查,这太繁琐
  • 将io.Reader封装到自定义的Reader中,记录碰到的最后一个error
    • 解析整个文件,别管那些错误
    • 最后检查下存储错误的结构
  • 建议阅读Rob Pike的“Errors are values”

不要泄露实现细节

  • 虽然文件中使用[16]byte来存储节拍,但是对于ON/OFF类型,用[16]bool就好
  • 没必要为了节省空间使用uint16,因为这会让API不好搞

写代码不是为了通过测试,而是为了解决问题

  • Pattern 5在文件末尾有额外的数据,应该通过解码文件头获取文件长度来解析文件,而不是看ID有没有SPLI
  • 通过测试不代表一切OK

最新文章

  1. Alwayson的IP冲突
  2. 一个典型的MapRuduce实例------webcount(网站统计访客信息)
  3. Homework
  4. Docx读写Word
  5. C# HttpWebRequest与HttpWebResponse详解
  6. freemarker中使用shiro标签
  7. C++ 重载new和delete操作符
  8. (转)MSMQ(消息队列)
  9. sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别
  10. spring配置JNDI(Java Naming and Directory Interface,Java命名和目录接口)数据源
  11. 2017-12-21 FriceEngine试用与API中文化
  12. 微服务监控zipkin、skywalking以及日志ELK监控系列
  13. Java -verbose[:class|gc|jni] 转 ----JAVA源码分析
  14. 微信支付服务器CA证书更换服务器安装der证书的方法 DigiCert的根证书
  15. win10禁止更新的方法
  16. 【线段树】【P4198】 楼房重建
  17. iOS设计模式(02):单例模式
  18. 爬虫--python3如何安装scrapy?
  19. centos7环境下ELK部署之elasticsearch
  20. 图片转成base64, base64转成图片

热门文章

  1. linux查杀病毒的几个思路
  2. WCF系列 Restful WCF
  3. mac os下android 通过battery-historian进行电量分析
  4. Linux命令下,cp,rm,mv命令的使用
  5. raw_input() 与 input()对比
  6. 简单的TableView
  7. Eclipse中的build path详解
  8. 第七篇:使用 fcntl 函数 获取,设置文件的状态标志
  9. 深入java虚拟机(二) 对象的创建
  10. HDU 5894 hannnnah_j’s Biological Test