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

相关推荐
请为小H留灯11 天前
2026最新!Mac安载MySQL 8.0 保姆级教程
数据库·mysql·macos·adb·数据库开发
石像鬼₧魂石17 天前
【Y2Ksoft】贵阳枫叶控股ERP管理系统 —— 管业制造 · 全链路数字化 · 开箱即用
大数据·数据仓库·数据库开发·数据库架构
石像鬼₧魂石18 天前
钢结构ERP管理系统 —— 玻璃拟态 · 单文件HTML(系统为开发测试虚拟数据)
大数据·数据仓库·制造·数据库开发·数据库架构
weixin_3077791321 天前
Linux下ClickHouse数据仓库故障系统化诊断脚本
linux·运维·clickhouse·自动化·数据库开发
Daorigin_com22 天前
合同管理进入“自动驾驶”时代:道本×DeepSeek的三重穿透
大数据·人工智能·深度学习·数据挖掘·数据库开发·业界资讯·改行学it
24计网1王仔寿1 个月前
Linux运维与云计算全栈系统化学习指南(Shell+虚拟化+OpenStack+Docker+公私云实战)
linux·课程设计·数据库开发·微信公众平台·neo4j·命令模式·sequoiadb
承渊政道2 个月前
【MySQL数据库学习】(MySQL表的内外连接)
数据库·学习·mysql·leetcode·bash·数据库开发·数据库系统
Resurgence_zc2 个月前
openGauss 资源池化主备页面交互流程梳理
网络·交互·数据库开发
炼川淬海DB2 个月前
数据库开发规范
android·adb·数据库开发
承渊政道2 个月前
【MySQL数据库学习】(MySQL复合查询)
数据库·学习·mysql·bash·database·数据库开发·数据库架构