GO语言课程中实际项目案例分析

以实际项目开发过程教学,让编程学习变得更简单

项目式教学方式分析



       学习软件开发课程,最终的目标就是开发软件项目,基于IT课程的学习特点, 项目式教学才能让学猿更好更全面的掌握技术,也能让学到的技术更实用。 学习猿地采用多个项目贯穿式教学,每个课程关联的技术点很多, 在有限的时间内很难讲解全面,而通过项目植入到课程中,就可以赛选出实际应用的知识点重点讲解。 另外,通过项目功能模块应用的技术反推出来的知识点,能让学猿更容易理解知识点的应用,达到学以致用的目的, 又可以举一反三,可以快速提高。也可以通过项目实战挖掘课程中没有讲到的新知识点, 扩展一下应用的知识面。

       大多数有丰富经验的程序员拥有自己的私人开发库,可以让程序猿在开发新项目时使用大约30%的重用代码来开发软件, 课程中的多个不同类型的项目也可以为学猿积累自己的私人开发代码库。

       另外,教学中的项目应用和实际商业项目还是有一些区别的,首先,并不是项目越大、需求越复杂越好, 因为用大项目教学让学员感觉很混乱,达不到学习的目标,有可能起到反作用。其次,教学项目使用的都是学员比较常见的类型项目,这样的项目需求不需要讲解学猿也很清除业务,能直接联想到开始步骤上, 就可以把精力都放在功能实现上。还有就是在教学项目中不会去实现商业项目中所有的功能, 而是会去简化功能和业务流程, 去除重复的功能模块, 同时也会在项目中应到一些反例代码,为了讲解不同的知识点的应用。 而教学项目和商业项目相同的地方也很多, 比如在软件工程方面的软件开发流程、开发工具使用、代码管理、团队合作,以及与客户沟通等方面是一致的。 当然,教学项目也有一些超过商业项目的地方,例如在具体的一些项目模块基础上,会设想多情况扩展开发下去,为让学员接触到更多的知识点。

       学员在项目阶段学习时,不仅只为实现表面的功能, 一定要做到像素级别的还原, 只有问题考虑周全, 注重每个细节,反复实验, 才能在项目开发课程中得到全面的提高。

项目一 Golang高并发爬虫框架



       纯Go语言编写的支持分布式的高并发、重量级爬虫软件,定位于互联网数据采集,为具备一定Go或JS编程基础的人提供一个只需关注规则定制的功能强大的爬虫工具。 它支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批量任务并发、输出方式丰富(mysql/mongodb/kafka/csv/excel等);另外它还支持横纵向两种抓取模式,支持模拟登录和任务暂停、取消等一系列高级功能。

项目背景:

       对于单任务版爬虫,每次都要请求页面,然后解析数据,然后才能请求下一个页面。整个过程中,获取网页数据速度比较慢, 那么我们就把获取数据模块做成并发执行。在项目的基础上,实现多任务并发版爬虫。

项目目标:

       调度器为每一个Request创建一个goroutine,每个goroutine往Worker队列中分发任务,发完就结束。所有的Worker都在抢一个channel中的任务。 但是这样做还是有些许不足之处,比如控制力弱:所有的Worker在抢同一个channel中的任务,我们没有办法控制给哪一个worker任务。 其实我们可以自己做一个任务分发的机制,我们来决定分发给哪一个Worker

项目功能:

       在并发版爬虫中,会同时执行多个Worker,每个Worker任务接受一个Request请求,然后请求页面解析数据,输出解析出的Requests和Item 因为又很多Request和Worker,所以还需要Scheduler模块,负责对请求任务的调度处理 Engine模块接受Worker发送的Requests和Items,当前我们先把Items打印出,把解析出的Request发送给调度器 其中Engine和Scheduler是一个goroutine,Worker包含多个goroutine,各个模块之间都是用channel进行连接


项目涉及技术点:

       为具备一定Go或JS编程基础的用户提供只需关注规则定制、功能完备的重量级爬虫工具; 支持单机、服务端、客户端三种运行模式; GUI(Windows)、Web、Cmd 三种操作界面,可通过参数控制打开方式; 支持状态控制,如暂停、恢复、停止等; 可控制采集量; 可控制并发协程数; 支持多采集任务并发执行; 支持代理IP列表,可控制更换频率; 支持采集过程随机停歇,模拟人工行为; 根据规则需求,提供自定义配置输入接口 有mysql、mongodb、kafka、csv、excel、原文件下载共五种输出方式; 支持分批输出,且每批数量可控; 支持静态Go和动态JS两种采集规则,支持横纵向两种抓取模式,且有大量Demo; 持久化成功记录,便于自动去重; 序列化失败请求,支持反序列化自动重载处理; 采用surfer高并发下载器,支持 GET/POST/HEAD 方法及 http/https 协议,同时支持固定UserAgent自动保存cookie与随机大量UserAgent禁用cookie两种模式,高度模拟浏览器行为,可实现模拟登录等功能; 服务器/客户端模式采用Teleport高并发SocketAPI框架,全双工长连接通信,内部数据传输格式为JSON。


动态加载规则 无需重新编译软件,书写简单,添加自由,适用于轻量级的采集项目.
静态加载规则 随软件一同编译,定制性更强,效率更高,适用于重量级的采集项目。

项目测试:

       在完成代码开发之后,需要对代码进行功能测试,按照功能图一个一个的进行测试,如果功能出现异常,则第一时间进行问题修复,然后重新开始新一轮的测试,因为代码变动很可能导致原来已经测试的功能出现异常。


项目上线:

       项目测试完毕没有Bug之后,需要做两件事情,一是将代码通过FTP工具上传到云空间,二是将数据库数据导出,并通过工具导入到空间对应到数据库中,完成这两件事之后,我们就可以通过域名访问我们的网站了。效果图如下:


项目二 GoLang Web商城系统



       使用 GO 语言的 Beego 框架和前端 React 框架打造一个在线商城。主要将实现用户的登录认证、购物车、商品秒杀、 信息推送、评论与点赞等功能模块。课程从搭建一个简单可用的例子开始,逐步实现各个功能模块,让你体会到一个在线商城的完整开发过程。

项目背景:

       随着电子商务的迅猛发展,网上商城已经成为销售产品的必要通道和手段。 因为它会让人们的购物更简单、便捷,用户足不出户就可以买到所需商品。而商城购物App是专门帮助商家快速形成自有的用户群体,通过免费的信息推送开展促销活动,有效提升销售业绩的最常用工具。

项目目标:

       课程从搭建一个简单可用的例子开始,让你掌握go和react+redux等前后端主流技术。最终使用 Go 语言和React , 完整开发一个在线购物商城网站,包含用户、购物车、订单管理、评论与点赞、购买等功能模块; 同时详解利用事件驱动模型,来解决秒杀活动中高并发库存锁定问题、防止api接口被非法调用、实现redux管理订单状态、cps编程模型实践等内容。框架完整,设计细节清晰,助你快速成为全栈工程师。

项目功能:

       大型电子商务平台,包含用户中心、商品展示、商品相册管理、购物车、订单、支付、评论、搜索、商品类型管理、权限管理等功能。


项目涉及技术点:

       1. 关系型数据库-mysql、no-sql缓存型数据库-redis 2. 分布式文件系统fastDFS、前端开发Html5+js+Css高级 3. Beego框架(router、orm、model、controller)

关系型数据库-mysql 所有商品信息和用户信息,还有购物信息都是使用MySQL数据库进行缓存的
no-sql缓存型数据库-redis 在这个商城项目中, 有好多商品信息需要缓存,这样速度更快。
fastDFS FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理
Html5+js+Css+React React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。开发前端和后端分离的模版
Beego框架 beego是一个使用 Go 的思维来帮助您构建并开发 Go 应用程序的开源Web开发框架

项目测试:

       在完成代码开发之后,需要对代码进行功能测试,按照功能图一个一个的进行测试,如果功能出现异常,则第一时间进行问题修复,然后重新开始新一轮的测试,因为代码变动很可能导致原来已经测试的功能出现异常。


项目上线:

       项目测试完毕没有Bug之后,需要做两件事情,一是将代码通过FTP工具上传到云空间,二是将数据库数据导出,并通过工具导入到空间对应到数据库中,完成这两件事之后,我们就可以通过域名访问我们的网站了。效果图如下:


项目三 Golang分布式微服务房源租赁平台



       租房也是现在很多城市中年轻一族经历过的事情,现在基本都是城中村的租房居多,为了更好地整理线下的房产资源, 房屋租赁管理系统开发就是通过把现在的线下零散的房屋资源进行有机的整合处理,无论是对于租客还是管理者都会有更加便捷的房屋租赁服务。

项目背景:

       随着我国市场经济的快速发展和人们生活水平的不断提高,简单的租凭服务已经不能满足人们的需求。如何利用先进的管理手段,提高房屋租凭管理水平,是当今社会所面临的一个重要课题。 本文通过用Java Web编写房屋租赁管理系统,利用软件工程原理,采用面向对象的编程方法,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面,实现了房屋租赁管理的自动化和信息化.

项目目标:

       基于Docker分布式容器,k8s作为容器编排搭建微服务基础设施。GoMicro搭建服务架构、Consul作为服务发现, 其中采用RESTful协议与gRPC/Protobuf作为微服务间通信机制,解决大企业高并发分布式理论后端服务方案。

项目功能:

       1.入驻信息认证:每个网上房源出租的租客都是需要实名进行信息的认证,房源信息认证,便于用户对于房源信息查询。 2.电子合同签订:租客在租房的时候可以通过电子合同签订,电子合同也是更加容易保存。 3.在线交租功能:每一个的租金信息,房东通过后台统一进行发放,,包括管理费、网费、水电费等的费用,租客通过软件在线交租即可。 4.房源信息查看:直接通过房屋租赁管理系统在线找房源的时候,点击每一栋楼的都会有房源信息详情的查看,如房型,租金等。 5.房东报表统计:每一个月的收入或者是房子的空闲率这些数量都是有着数据的统计记录,房东直接通过统计报表就可以查看。


项目涉及技术点:

        1.微服务的优势 2. docker容器构建微服务 3. protobuf微服务交互协议 4. gRPC远程调度机制 5. 服务发现 6. 基于go-micro微服务实战

后端架构 微服务架构模式有很多好处。首先,通过分解巨大单体式应用为多个服务方法解决了复杂性问题。在功能不变的情况下, 应用被分解为多个可管理的分支或服务。每个服务都有一个用RPC-或者消息驱动API定义清楚的边界。
docker容器 Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
protobuf protobuf是google团队开发的用于高效存储和读取结构化数据的工具。什么是结构化数据呢,正如字面上表达的,就是带有一定结构的数据。
gRPC gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
服务发现 服务的注册与发现是微服务必不可少的功能,这样系统才能有更高的性能,更高的可用性。
go-micro Go Micro 是一个用于微服务开发的框架。 Go Micro 为分布式系统开发提供了核心需求,包括 RPC 和事件驱动通信。 微观哲学是明智的默认与可插拔的架构。我们提供默认设置,让您快速启动,但一切都可以轻松地交换出去。

项目测试:

       在完成代码开发之后,需要对代码进行功能测试,按照功能图一个一个的进行测试,如果功能出现异常,则第一时间进行问题修复,然后重新开始新一轮的测试,因为代码变动很可能导致原来已经测试的功能出现异常。


项目上线:

       项目测试完毕没有Bug之后,需要做两件事情,一是将代码通过FTP工具上传到云空间,二是将数据库数据导出,并通过工具导入到空间对应到数据库中,完成这两件事之后,我们就可以通过域名访问我们的系统了。效果图如下:



项目四 基于HyperLedger Fabric食品溯源平台



       如何做防伪呢,这个领域很多公司已经探索多年,各种高科技应用,武装到牙齿,但仍没有解决假货问题。 区块链的出现很可能是一个突破,我们只需将现有成熟的防伪技术与区块链结合即可。 现在流行的访问技术太多了,我倾向于采用二维码技术,二维码与互联网紧密相连。

项目背景:

       需求是通过区块链跟踪产品,实现产品产地,生产,流通等环节溯源。 需求归纳,需要实现下面几点: 产品具备通用的属性,例如名称,价格,重量,颜色,体积等等 生产销售链条跟踪 涉及环节,农产品的供应链是一个非常复杂的过程,涉及多方,农业局、卫生局、药监局、工商局、环保局等多个部门交织其中。 参与者角色,我们为每个环节的参与者分配一个以太坊账号,例如每个供应商一个账号,每个代理商一个账号。这样任何一方经手后都会使用自己的账号想合约中添加数据。

项目目标:

       安全分为很多层,区块链只能做到存储层的安全。区块链无法解决用户层,应用层,逻辑层等安全问题,他只能保证存储在硬盘上的区块不被修改。 因为区块链仅仅能解决数据存储层的安全问题,不能保证上链的数据是真实的,上链前绝对不会被篡改;所以仅仅朔源,不考虑防伪是没有意义的,防伪仍然是重中之重。

项目功能:

       发布食品 添加配料信息 中转食品 查询食品信息 查询配料信息 查询中转信息(只可以溯源整个食品信息,不能溯源配料信息)


项目涉及技术点:

       区块链目前的底层只适合做,低频高价值的业务。 区块链的读取性能通常是没有问题的,但是区块链的写入实际上无论你用多少个服务器节点都不能提升,因为写入区块需要做共识算法,这步操作,会在所有节点上进行,同时还需要加密运算,这些操作都是 CPU 密集型操作。所以写入操作是存在瓶颈的。 通过消息队列技术异步写入,将需要写入的区块放入队列,异步完成上链操作。 并行写入,我们可以建设多个区块链平台。多个平台同时服务于业务。 为了达到去中心化并行写入,我们将在客户端通过算法,匹配服务器。而不是在两个平台前面增加负载均衡。因为这样又回到了中心化系统。

HyperLedger Fabric Hyperledger Fabric是开源的企业级要许可的分布式账本技术(DLT)平台,被设计用于企业环境,提供了一些关键的超过其他流行分布式账本或区块链平台的差异化能力。
智能合约 智能合约(英语:Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。
chainCode chaincode也能被称作“智能合约”,一般情况下,chaincode不能直接去访问另一个chaincode创建的状态,但是在相同网络下,在合适的许可下,chaincode可以调用另一个chaincode去访问其创建的状态。

项目测试:

       在完成代码开发之后,需要对代码进行功能测试,按照功能图一个一个的进行测试,如果功能出现异常,则第一时间进行问题修复,然后重新开始新一轮的测试,因为代码变动很可能导致原来已经测试的功能出现异常。


项目上线:

       项目测试完毕没有Bug之后,需要做两件事情,一是将代码通过FTP工具上传到云空间,二是将数据库数据导出,并通过工具导入到空间对应到数据库中,完成这两件事之后,我们就可以通过域名访问我们的网站了。效果图如下:


项目五 区块链钱包开发



        随着区块链技术的兴起,各种数字货币如同雨后春笋般冒了出来。而在看到比特币大热之后,许多投资人也从股市、房市等地转战币圈。玩币、 炒币都离不开区块链钱包,评价一个区块链钱包的好坏,首当其冲的就是安全性,没有什么比账户的安全更重要。十大最安全的区块链钱包排行榜中的产品就能做到这一点,没了安全保障,便捷和快速也毫无意义。

项目背景:

       如果你刚刚进入区块链世界, 会茫然不知所措, 弄不懂稀奇古怪的数字, 晦涩难懂的专业词语, 怎样才能迈出跨入区块链大门的第一步呢? 首先,我们不要去研究到底什么是区块链, 什么是智能合约、加密算法等等,你要做的第一步就是:先拥有一个自己的钱包。 那么,就会有人问了,为什么需要拥有属于自己的区块链钱包?要弄明白这个问题,首先我们需要了解区块链钱包的相关概念: 区块链钱包是一个软件程序,一个存储加密货币的软件程序。从形式上,非常像网络银行的账户,也有客户标识、账号、密码。

项目目标:

       我们能理解到区块链地址是根据非对称加密算法,生成私钥和公钥,从公钥根据一系列的计算推导出地址。 任何人均可以生成大量的私钥、公钥、地址,那么问题来了,怎么来生成这些能,总不能我们自己来纸笔根据算法自己计算出来,这肯定是不现实的, 区块链钱包工具正是这样的工具来帮忙我们生成私钥、公钥、生成符合某个公链规范的地址(不同的公链有不同的算法规范)。

项目功能:

       区块链轻钱包,包含 助记词、Keystore、私钥 生成、导入导出管理,管理 地址 中 对应币种资产,轻松转账并查询记录。


项目涉及技术点:

       钱包助记词生成了种子(Seed),种子(Seed)生成了私钥,私钥推导出公钥,公钥节选部分成了钱包地址。 同时钱包提供了keystore,它也是私钥加密后的文件,可以配合正常的密码使用,便捷了用户的钱包使用。1. 一套助记词,创建主流币种与各种代币 2. 为用户管理各种转账地址,并备注,方便快捷 3. 以太坊solidity最新语法 4. solc智能合约编译,web3前后端存取以太坊数据,vue前端框架 5. 主流币与ERC代币接口,truffle框架(对客户端做了深度集成:开发、测试、部署)

truffle框架 truffle是一个以太坊的开发和测试框架。使用它可以方便我们快速的在以太坊上开发。
solidity solidity是一种语法类似JavaScript的高级语言,它被设计成以编译的方式生成以太坊虚拟机代码。

项目测试:

       在完成代码开发之后,需要对代码进行功能测试,按照功能图一个一个的进行测试,如果功能出现异常,则第一时间进行问题修复,然后重新开始新一轮的测试,因为代码变动很可能导致原来已经测试的功能出现异常。


项目上线:

       项目测试完毕没有Bug之后,需要做两件事情,一是将代码通过FTP工具上传到云空间,二是将数据库数据导出,并通过工具导入到空间对应到数据库中,完成这两件事之后,我们就可以通过域名访问我们的网站了。效果图如下:


项目式教学额外的收获



       通过课程中多个项目的植入讲解,除了可以收获技术和项目代码之外,更能收获软件工程方面的知识,和讲师经验的分享。可以直接获得项目的管理,其中涉及团队协作,项目代码管理,项目进度管理,开发团队的维护和管理。 除此之外还可以了解到如何进行客户沟通,以及整个项目的开发流程,宏观认识项目。 这些项目中贯穿了项目工程内容,涉及代码管理、团队协作、项目流程、客户沟通以及相关工具的使用。

代码管理
  • - Git安装
  • - 代码时光机
  • - 多人合作
  • - 分支特性
  • - 远程仓库
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 其中很多的特性相较于svn,cvs更加的强大,特别是分支特性,更好的维护产品代码,保证代码的健壮性。
团队协作
  • - 文档管理
  • - 设计图管理
  • - 团队人员分工
  • - 员工沟通技巧X
团队协作是团队运作非常重要的一个环节,直接影响整个项目能否顺利完成。其中还包括员工的沟通,考核已经后续的升职加薪。
项目开发流程
  • - 原型制作
  • - 设计图制作
  • - 数据库设计
  • - 框架开发
  • - 软件测试
  • - 上线部署流程
了解整个项目的开发流程对开发人员有着非常重要的意义,开发人员可以在宏观角度来认识项目,并提高和其他部门之间的配合,为后续的升职加薪做好准备。
客户沟通
  • - 客户沟通
客户是公司生存的经济来源,与客户的沟通显得至关重要,企业技术总监亲自讲述与客户沟通的那些事。

加群主微信
购买后
拉进交流群
学习交流
¥8192元 立即购买