[翻译]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
[翻译]Feedback on the Go Challenge solutions的更多相关文章
- 【翻译】Organizing ASP.NET MVC solutions 如何组织你的ASP.NET MVC解决方案
序言 时隔一年,弦哥重出江湖,对于我们学习.NET MVC那将有大大的好处,期待弦哥的重构系列.在弦哥与jerrychou的交流中提到了一篇文章http://lostechies.com/jimmyb ...
- 论文翻译:2020_Acoustic Echo Cancellation Challenge Datasets And Testingframework
论文地址:ICASSP 2021声学回声消除挑战:数据集和测试框架 代码地址:https://github.com/microsoft/DNS-Challenge 主页:https://aec-cha ...
- xv6的作业翻译——作业1 - shell和系统调用
Xv6的lecture LEC 1 Operating systems L1: O/S overview L1:O/S概述 * 6.828 goals 6.828的目标 Understan ...
- Lab_1_SysOps_Compute_Linux_v2.5
System Operations - Lab 1: Creating Elastic Compute Cloud (Amazon EC2) Instances (Linux) - 2.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 ...
- 论文翻译: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声学回声消除挑战:结合时间对准的自适应回声消除和基于深度学习 ...
- ZooKeeper Recipes and Solutions 翻译
ZooKeeper 秘诀 与解决方案 A Guide to Creating Higher-level Constructs with ZooKeeper Out of the Box Applica ...
- 文献翻译|Design of True Random Number Generator Based on Multi-stage Feedback Ring Oscillator(基于多级反馈环形振荡器的真随机数发生器设计)
基于多级反馈环形振荡器的真随机数发生器设计 摘要 真随机数生成器(trng)在加密系统中起着重要的作用.本文提出了一种在现场可编程门阵列(FPGA)上生成真随机数的新方法,该方法以 多级反馈环形振荡器 ...
- What is probabilistic programming? | 中文翻译
What is probabilistic programming? | 中文翻译 Probabilistic languages can free developers from the compl ...
随机推荐
- Python_ip代理
#encoding=utf8import urllibimport urllib2import sys sys.path.append('D:/python/beautifulsoup')sys.pa ...
- 响应式网页设计:rem、em设置网页字体大小自适应
「rem」是指根元素(root element,html)的字体大小,好开心的是,从遥远的 IE6 到版本帝 Chrome 他们都约好了,根元素默认的 font-size 都是 16px.这样一个新的 ...
- HTML表单页面的运用
本章目标:掌握表单基本结构<form> 掌握各种表单元素 能理解post和get两种提交方式的区别 本章重点:掌握各种表单元素 本章难点:post和get两种提交方式的区别 一. H ...
- 卡友友刷MPOS注册开通流程!
1.下载友刷APP:打开微信扫描机器背面二维码—点击右上角游览器打开 2. 注册-身份证认证-结算卡绑定:用本人手机号注册完成后,顺着进行身份认证.以及储蓄结算卡绑定.具体看下图: 3.绑定机器:选择 ...
- VisualSVN 5.1.5 破解版 手动破解教程 生成dll文件
VisualSVN 5.1.5 破解版 手动破解教程 生成VisualSVN.Core.L.dll文件 附上本人用到的命令: ildasm "D:\Program Files (x86)\V ...
- structure machine learning projects 课程笔记
orthogonalization/ one metric train.dev/test 划分 开发集和测试集一定来自同一分布 onthe same distribution Human leve ...
- (转)使用 python Matplotlib 库绘图
运行一个简单的程序例子: import matplotlib.pyplot as plt plt.plot([1,2,3]) plt.ylabel('some numbers') plt.show() ...
- php数据库操作命令精华大全
1.表结构//列信息2.表数据//行信息3.表索引//把列中的行加到索引中(一般情况下一个表一定要把id这一列的所有数据都加到主键索引中) 2.[dos下]关闭mysql:net stop mysql ...
- python中函数参数*args和**kw的区别
1.函数与参数(实参) 在python中创建函数是def,创建函数名是def f(),f函数名字,def f(a,b),这里的a,b是两个参数,函数名是自定义的,参数也是自定义,随意就好.看图如下效果 ...
- 利用wireshark抓取远程linux上的数据包
原文发表在我的博客主页,转载请注明出处. 前言 因为出差,前后准备总结了一周多,所以博客有所搁置.出差真是累人的活计,不过确实可以学习到很多东西,跟着老板学习做人,学习交流的技巧.入正题~ wires ...