MIT6.5830 实验0

前置

本次实验使用 Golang 语言实现,在之前的年份中,都是像 cs186 那样使用 Java 实现。原因:

  1. Golang 语言作为现代化语言,简单易上手但功能强大。

  2. 使参加实验的同学有同一起跑线,而不是像Java那样,有些同学有语言基础有些同学没有。

实验链接: https://github.com/MIT-DB-Class/lab0

实验内容

熟悉基本的Go语言,包括:

  1. 下载并安装

  2. Hello World 程序

  3. Error 处理、指针、结构体、数组、map、接口等基本用法。

在熟悉上述内容后,需要按照指引提前下载好 mbta.sqlite 文件并放到代码目录下,最后正式开始实验

  1. HTTP

目标是创建一个 http 服务器,补全 handler.go 中的 HomeHandler 函数代码,最终可以通过游览器直接访问到如下页面。

MIT6.5830 实验0_第1张图片

得益于Golang的强大,创建 http 服务器只需要一行代码,这时候直接启动服务,访问 http://localhost:8080 即可,但不会显示上述页面,需要进一步补全 HomeHandler 代码。

MIT6.5830 实验0_第2张图片

  1. 在 HomeHandler 函数中,首先要打开数据库文件,才能进行后续的读取操作。打开函数已经提供,RidershipDB 接口的 Open 方法, 直接调用即可。

  2. 打开数据库后要执行查询,而查询的函数也已经提供了,RidershipDB 接口的 GetRidership 方法,直接调用即可。

  3. 查询得到了一个 int64 数组后, 需要把其转换成展示表格,转换函数也已经提供,utils.GenerateBarChart。MIT6.5830 实验0_第3张图片

  1. 最后将所有数据填充到 http 响应体前,需要把数据做一次 base64 转换,这是 http 协议中常用到的规则。转换函数没有提供,通过搜索得知, golang提供了原生的转换方法。MIT6.5830 实验0_第4张图片

  2. 最后将所有数据填充到 http 响应体中,肯定是调用 tmpl 对象的某个方法,通过IDE提供的 hint 观察,找到 Execute 函数。

MIT6.5830 实验0_第5张图片

  1. SQL over CSV

第二部分,需要从 csv 中而不是文件中读取数据,另外需要将 CsvRidershipDB 对象实验RidershipDB接口。

  1. CsvRidershipDB缺少的是 GetRidership 函数和 Close函数,对于 Close 函数直接返回 csvFile.Close() 即可。

  2. 实现GetRidership方法。打开函数已经提供,RidershipDB 接口的 Open 方法已经被 CsvRidershipDB 对象实现了, 直接调用即可。

  3. 然后通过 csvReader.ReadAll() 读取全量 csv 数据之后进行循环并解析,需要注意的是要跳过表头,并且列号是从0开始的,全量代码如下。

MIT6.5830 实验0_第6张图片

实验总结

  1. 掌握如何以最简单化的方式启动 http 服务器并注册路由。

  2. Golang中的对象实现接口不像Java中那种用 implement 关键字展示指定,而是只有实现了接口对应的所有方法,才算是接口的实现对象。弊端是阅读代码时不知道对象和接口之间的实现关系,好在有IDE的指示。

  3. 如何读取 csv 并进行解析。

联系方式

[email protected]

你可能感兴趣的:(MIT6.5830,数据库开发,mit课程)