第一次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

[翻译]Feedback on the Go Challenge solutions的更多相关文章

  1. 【翻译】Organizing ASP.NET MVC solutions 如何组织你的ASP.NET MVC解决方案

    序言 时隔一年,弦哥重出江湖,对于我们学习.NET MVC那将有大大的好处,期待弦哥的重构系列.在弦哥与jerrychou的交流中提到了一篇文章http://lostechies.com/jimmyb ...

  2. 论文翻译:2020_Acoustic Echo Cancellation Challenge Datasets And Testingframework

    论文地址:ICASSP 2021声学回声消除挑战:数据集和测试框架 代码地址:https://github.com/microsoft/DNS-Challenge 主页:https://aec-cha ...

  3. xv6的作业翻译——作业1 - shell和系统调用

    Xv6的lecture LEC 1 Operating systems   L1: O/S overview L1:O/S概述   * 6.828 goals 6.828的目标   Understan ...

  4. Lab_1_SysOps_Compute_Linux_v2.5

    System Operations - Lab 1: Creating Elastic Compute Cloud (Amazon EC2) Instances (Linux) - 2.5 ===== ...

  5. SQL Server 2008 R2 SP3 and SQL Server 2008 SP4 are now available!

    时间 2014-10-02 00:00:00 SQL Server Team Blog   原文  http://blogs.technet.com/b/dataplatforminsider/arc ...

  6. 论文翻译:2021_ICASSP 2021 ACOUSTIC ECHO CANCELLATION CHALLENGE: INTEGRATED ADAPTIVE ECHO CANCELLATION WITH TIME ALIGNMENT AND DEEP LEARNING-BASED RESIDUAL ECHO PLUS NOISE SUPPRESSION

    论文地址:https://ieeexplore.ieee.org/abstract/document/9414462 ICASSP 2021声学回声消除挑战:结合时间对准的自适应回声消除和基于深度学习 ...

  7. ZooKeeper Recipes and Solutions 翻译

    ZooKeeper 秘诀 与解决方案 A Guide to Creating Higher-level Constructs with ZooKeeper Out of the Box Applica ...

  8. 文献翻译|Design of True Random Number Generator Based on Multi-stage Feedback Ring Oscillator(基于多级反馈环形振荡器的真随机数发生器设计)

    基于多级反馈环形振荡器的真随机数发生器设计 摘要 真随机数生成器(trng)在加密系统中起着重要的作用.本文提出了一种在现场可编程门阵列(FPGA)上生成真随机数的新方法,该方法以 多级反馈环形振荡器 ...

  9. What is probabilistic programming? | 中文翻译

    What is probabilistic programming? | 中文翻译 Probabilistic languages can free developers from the compl ...

随机推荐

  1. Xcode下开发c静态库for ios CPU架构 静态库合并

    新建一个Cocoa Touch Static  Library工程 1,先在工程左侧删除“工程名Tests”下的文件与文件夹(从内往外删,最后删除"工程名Tests文件夹") :D ...

  2. va_list中的_vsntprintf使用介绍

    相信大家都用过sprintf这个函数,就是下面这样: int sprintf( char *buffer, const char *format [, argument] ... ); 在之前看到了用 ...

  3. CSS之webkit-scrollbar例子

    基于webkit的浏览器现在也可以自定义其样式: ::-webkit-scrollbar              { /* 1 */ }   ::-webkit-scrollbar-button   ...

  4. visio中设置下标

    下标:ctrl+"=" 上标:ctrl+shift+"="

  5. python技巧之下划线(一)

    1.python的moudles文件中__all__作用 Python的moudle是很重要的一个概念,我看到好多人写的moudle里都有一个__init__.py文件.有的__init__.py中是 ...

  6. 一个最简单的JStorm例子

    最简单的JStorm例子分为以下几个步骤: 1.生成Topology Map conf = new HashMp(); //topology所有自定义的配置均放入这个Map TopologyBuild ...

  7. jq 之Autocomplete 引发联想及思考

    前情纪要:JQuery UI 是以 JQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互.动画.特效和可更换主题的可视控件,这些控件主要包括:Accordion,Au ...

  8. VMware虚拟机NAT(地址转换模式)

    转载于:https://www.linuxidc.com/Linux/2016-09/135521p2.htm 二.NAT(地址转换模式)   刚刚我们说到,如果你的网络ip资源紧缺,但是你又希望你的 ...

  9. Windows 磁盘分区

    在“我的电脑”右键,点击“管理”,打开计算机管理,然后如图操作

  10. pro-select-limit-if

    drop procedure if exists p9; CREATE PROCEDURE p9 () BEGIN DECLARE a INT; DECLARE b INT; DECLARE c IN ...