MIT6.5830 实验0

news2024/11/24 3:12:20

前置

本次实验使用 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 函数代码,最终可以通过游览器直接访问到如下页面。

得益于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 函数。

  1. 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1424907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙HarmonyOS——AVSession开发指导

AVSession开发指导 说明: AVSession的所有接口均为系统接口,其功能仅提供给系统应用使用。 会话接入端开发指导 基本概念 会话元数据AVMetadata: 媒体数据相关属性,包含标识当前媒体的ID(assetId),上一首媒体的ID(previousAsset…

链式二叉树(1)

目录 二叉树的概念&结构 二叉树的遍历概念 手写二叉树测试 二叉树遍历实现代码 递归图解 前序遍历递归图解 中序序遍历递归图解 后续遍历递归图解 二叉树的概念&结构 二叉树是: 空树非空:根节点,根节点的左子树、根节点的右子…

基于MongoDB实现聊天记录的存储

一、mongodb简介 1.1 mongodb简介 MongoDB是一个基于分布式文件存储的数据库,使用C语言编写。它旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富、最像关系数据库的。 Mong…

【TCP】三次握手(建立连接)

前言 在网络通信的世界里,可靠传输协议(TCP)扮演着重要的角色,它保证了数据包能够按顺序、完整地从发送端传送到接收端。TCP协议中有一个至关重要的机制——三次握手。这一过程确保了两个TCP设备在开始数据传输之前建立起一个稳定…

计算机毕业设计 | SpringBoot 房屋租赁网 房屋租赁平台(附源码)

1,绪论 1.1 背景调研 在房地产行业持续火热的当今环境下,房地产行业和互联网行业协同发展,互相促进融合已经成为一种趋势和潮流。本项目实现了在线房产平台的功能,多种技术的灵活运用使得项目具备很好的用户体验感。 这个项目的…

【Linux】环境基础开发工具的使用(一)

前言:在此之前我们学习了一些Linux的权限,今天我们进一步学习Linux下开发工具的使用。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:Linux的深度刨析 👈 💯代码仓库:卫卫周大胖的学习日记…

长时间佩戴骨传导耳机会损害听力吗?骨传导耳机有什么优点?

如果是正常的使用,是不会对损伤听力的,如果错误的使用,比如说高音量使用,长时间也会出现一定的危害,而且骨传导耳机相比于传统耳机,其优点也要多一些,下面一起看下骨传导耳机都有哪些优点吧。 佩…

dockerpipwork相关测试过程

pipework可以减轻docker实施过程中的工作量,在网上也找了几篇类似的文章,按照相应配置,结果并不相同 如下测试过程记录下: docker run -it --rm --name c1 busybox docker run -it --rm --name c2 busyboxpipework br1 c1 192…

玛格全屋定制携手君子签,实现业务信息、流程、合同全面数字化

中国定制家居领导品牌——玛格全屋定制携手君子签,部署玛格业务系统,将电子签章系统与供应链上下游业务合同签署场景融合,通过无纸化、电子化的签署环境,打造业务“线上审批、签署、归档”闭环,助推业务减负提效。 电…

Redis 布隆过滤器

布隆过滤器 这一篇文章主要是记录布隆过滤器的使用和认识 主要参考了如下的blog https://blog.csdn.net/weixin_42972832/article/details/131211665 他讲的还不错 简单的来说,布隆过滤器,实际上就像是一个集合,拿redis的key来举例来说,布隆过滤器的设置就是去过滤不属于redi…

5、混合模型(Hybrid Models)

将两个预测模型的优势结合起来。 文章目录 1、简介2、组件和残差3、混合预测与残差3.1设计混合模型4、示例 - 美国零售销售1、简介 线性回归擅长推断趋势,但不能学习交互。XGBoost擅长学习交互,但不能推断趋势。在这个课程中,我们将学习如何创建"混合"预测器,这…

分割头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

BeanFactory创建过程(基于Servlet)

BeanFactory创建过程(基于Servlet) 1. 概述1.2 那么问题就来了1.2.1 谁负责AnnotationConfigServletWebServerApplicationContext实例呢?1.2.2 ApplicationContextFactory初始化过程又是怎么样的? 1.3 总结 2. 最后 1. 概述 Anno…

【C++零散小记录】类中重载返回类型为常量引用和非常量引用的函数

#include <iostream>class hyp { public://这里后面必须要加上const修饰符&#xff0c;否则这两个test函数不能重载int const& test() const{std::cout << "const" << std::endl;return num;}//int &test()//{// std::cout << &qu…

吉大计网笔记

Osi七层模型 物理层&#xff1a;比特流的透明传输 数据链路层&#xff1a;ip数据包装成帧并传输&#xff0c;处理相邻节点的数据传输。 网络层&#xff1a;选择路由和交换节点&#xff0c;处理任意节点的数据传输。 运输层&#xff1a;主机进程的数据传输服务&#xff0c;端到端…

雷达DoA估计的跨行业应用--麦克风阵列声源定位(Matlab仿真)

一、概述 麦克风阵列&#xff1a; 麦克风阵列是由一定数目的声学传感器&#xff08;麦克风&#xff09;按照一定规则排列的多麦克风系统&#xff0c;而基于麦克风阵列的声源定位是指用麦克风拾取声音信号&#xff0c;通过对麦克风阵列的各路输出信号进行分析和处理&#xff0c;…

Kubernetes实战(二十一)-event事件持久化

默认情况下&#xff0c; K8S 会将事件保留在 etcd 中一个小时&#xff0c;超过1小时的事件将无法看到&#xff0c;所以 K8S 默认保留事件的时间不足以来更深入的了解集群&#xff0c;所以将事件导出到集群外存储是有必要的&#xff0c;以实现可观测性和告警。 Event事件持久化…

央视见证|“看见中国汽车”走进首家汽车供应链企业东软睿驰

由工业和信息化部支持指导&#xff0c;中国汽车工业协会和央视网联合出品的2023《看见中国汽车》专题东软睿驰篇正式上线&#xff0c;记录品牌向上专项行动走进首家汽车供应链企业&#xff0c;展示东软睿驰围绕“成为OEM 软件定义汽车时代最可信赖的合作伙伴”核心战略的创新发…

IT行业证书大揭秘:哪些证书含金量最高?

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f4d2; 证书 &#x1f4d2; &#x1f4d6; 介绍 &#x1f4d6; 在IT行业&#xff0c;有许多证书被认为是含金量高的&#xff0c;可以帮助个人在职业发展中取得重要的竞争优势。以下是一些IT行业中被认为含金量高的证书&#x…

信用飞品牌升级——全方位优化用户体验 更周到更暖心

在当今社会,金融科技的迅速发展让信贷服务变得更加便捷。信贷品牌的崛起和发展,正在改变着人们的金融生活。消费者在选择信贷服务时,不仅仅关注信贷的额度和利率,服务体验也成为了一大关注点。一个优秀的信贷品牌,不仅要能满足用户的基本信贷需求,更要在服务体验上赢得用户的认…