前言
前一课我们学习了如何在云筏容器云平台新建并测试Go容器环境(https://www.liujason.com/article/414.html),在完成环境搭建的前提下,我们继续学习如何通过代码托管仓库开发并部署Go程序
Git简介
Git是目前世界上最先进的分布式版本控制系统(没有之一),学会使用Git是程序员的必经之路!
什么是代码版本控制?
如果你用Word写过论文,那你一定有这样的经历:
想删除/大改一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:
过了一周,你突然想找回之前被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找。作为有轻微强迫症的我,看着一堆乱七八糟的文件,只想把其他的删掉只保留最新的版本,但是又怕哪天会用上不敢删。
如果碰上论文有些部分需要老师/同事合作修改,那你会把文件通过Email发给他们,然后你同时继续修改论文。几天后老师和同事再把改好的Word文件传给你。此时,你必须把你自己这段时间作的改动和老师/同事做的改动合并成新的文档,实际操作中非常心累。
而Git就是解决上述痛点的软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?
这个软件用起来就应该像这个样子,能记录每次文件的改动:
版本 | 文件名 | 用户 | 说明 | 日期 |
---|---|---|---|---|
1 | service.doc | Jason | 新建了文件“云筏科技服务条款” | 7/12 10:38 |
2 | service.doc | Ginger | 修改了服务条款5(第66行) | 7/12 18:09 |
3 | service.doc | Helen | 修改了退款政策(第233行) | 7/13 9:51 |
4 | service.doc | Nathan | 修改了销售代理商规则(第666行) | 7/14 15:17 |
这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的21世纪。
Git的特点总结
作业1:仔细阅读Git简介(基础版|高级版),总结一下使用Git相比于以文件形式存储的优势有哪些
使用Git创建自己的第一个代码库
建立一个新库
这里我们用腾讯的工蜂作为我们的代码管理系统,请使用注册并登录 https://code.tencent.com/ 如已有账户则直接登录即可。
然后点击右上角的+号,创建一个新的项目
然后填写项目名“go-study”或者自己取一个名字,可以使用英文字母和下划线/中划线;之后选择为“公开”项目,这样方便我们直接部署到云筏容器云平台。
初始化库
由于我们的主要目的是学习Go,因此就不过多涉及git的内容,只用图形化界面即可。有兴趣的可以了解一下git的代码行使用:https://www.rcoding.net/rcoding/git-recipes 非常的简单方便。
我们在新建的库中可以看到“新建自述文件”,点击后随便写点什么,然后添加“提交信息”后提交变更即可。这里的“提交信息”即为此次代码修改的备注,你可以写“首次添加readme文档”,这里的备注在合作开发的时候非常重要。
添加一个GO语言脚本
回到项目的根目录下(如:https://git.code.tencent.com/liujason/go-study,替换为自己的地址),可以看到刚刚添加的README.md文件,在上方有一个加号,点击即可创建一个新的文件。
命名新文件为“go-study-2-2.go”,在里面加上以下代码:
package main import ( "fmt" "net/http" ) func sayhelloName(w http.ResponseWriter, r *http.Request){ fmt.Fprintf(w, "Hello World from LiuJason!") } /*主函数开始*/ func main() { http.HandleFunc("/go-study-2-2.go", sayhelloName) http.ListenAndServe(":8080", nil) }
- 第一段 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
- 第二段 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
- 第三段 定义了一个函数sayhelloName,在函数中用Fprintf输出了"Hello World from LiuJason!"
- 第四段 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。其中/*...*/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
- 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
将Git代码部署到容器云平台
有了上面的示例代码,我们想知道实际的部署效果如何(就是个Hello, World!),那么我们就需要将代码部署到服务器中。
回到云筏容器云平台(app.paas.cloudraft.cn),看到之前我们创建的GO环境,点击Deployments行的小图标:
选择Git,然后点击Add New,然后填入名称和腾讯工蜂中创建的项目git链接(如我创建的是:https://git.code.tencent.com/liujason/go-study.git),使用账号密码/sshkey进行身份认证,如果是微信登录的腾讯工蜂需要新建sshkey,不会的话去问小汤吧或者大家自己交流一下。
然后点击Deploy,服务器就开始自动部署了,稍等片刻部署完成后点击查看项目的网页(http://域名/go-study-2-2.go):
作业2:完成Git拉取部署