zoukankan      html  css  js  c++  java
  • [翻译]Feedback on the Go Challenge solutions

    第一次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
  • 相关阅读:
    CI/CD for Power Platform
    SpringMVC异常处理
    SpringMVC框架中的拦截器
    spring实现文件上传
    idea常用的快捷键
    解决maven项目创建过慢的问题
    springmvc—入门程序
    Spring中的 JdbcTemplate
    基于XML的AOP 配置
    基于注解的 AOP 配置
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/4358608.html
Copyright © 2011-2022 走看看