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 文件并放到代码目录下,最后正式开始实验

HTTP

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

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

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

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

  3. 查询得到了一个 int64 数组后, 需要把其转换成展示表格,转换函数也已经提供,utils.GenerateBarChart。

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

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

SQL over CSV

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

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

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

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

实验总结

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

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

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

联系方式

francis_l@qq.com

相关推荐
owCode6 天前
OceanBase训练营miniob提测踩坑
数据库·oceanbase·数据库开发
豆豆豆大王8 天前
Android SQLite 数据库开发完全指南:从核心概念到高级操作
android·sqlite·数据库开发
几何心凉11 天前
openGauss:多核时代企业级数据库的性能与高可用新标杆
前端·数据库·数据库开发
_Minato_16 天前
数据库知识整理——SQL数据定义
数据库·sql·mysql·oracle·database·数据库开发·数据库架构
呆呆小金人21 天前
SQL字段对齐:性能优化与数据准确的关键
大数据·数据仓库·sql·数据库开发·etl·etl工程师
谅望者22 天前
SQL子查询完全指南:从零掌握嵌套查询的三种用法与最佳实践
数据库·sql·数据库开发·子查询
帅次22 天前
系统分析师-案例分析-数据库系统&数据仓库&反规范化技术&NoSQL&内存数据库
大数据·数据库·数据仓库·oracle·kafka·数据库开发·数据库架构
呆呆小金人24 天前
SQL视图:虚拟表的完整指南
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
呆呆小金人25 天前
SQL键类型详解:超键到外键全解析
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
那我掉的头发算什么1 个月前
【数据库】事务
数据库·sql·mysql·github·数据库开发