包管理

包管理是golang大型工程开发的基础,golang的一个完整的工程应该分为3个模块,分别是:

  • src:所有的源代码,必须自己组织创建
  • pkg:源代码编译成的二进制的包,自动生成
  • bin:最终的可执行程序,自动生成。main函数所在的那个文件的包。

golang有两个路径,名称和作用分别是:

  • GOROOT:golang安装的位置,这是安装的时候自动添加的,类Unix系统下通过export $GOROOT查看。Ubuntu18.04LTS通过apt安装的包,需要添加GOROOT=/usr/lib/go
  • GOPATH:这是需要自己配置的,是当前工程所在的目录,配置这个路径的作用是为了更好的使用go的包管理工具。每次开启开发的时候,使用export配置。以该项目为例子,终端输入export GOPATH=~/code/GoProject && source ~/.bashrc

先给出源代码结构:

Golang有个特点,每次开发一个包的文件时,最好都写上测试用例,直接开发测试一起进行;当然,这不是必须的。

每个文件的内容如下:

add.go

package simplemathfunc Add(a, b int) int {return a + b
}

add_test.go

package simplemathimport "testing"func TestAdd1(t *testing.T) {r := Add(1, 2)if r != 3 {t.Errorf("Add(1, 2) failed. Got %d, expected 3", r)}
}

sqrt.go

package simplemathimport "math"func Sqrt(x int) int {i := math.Sqrt(float64(x))return int(i)
}

sqrt_test.go

package simplemathimport "testing"func TestSqrt1(t *testing.T) {v := Sqrt(16)if v != 4 {t.Errorf("Sqrt(16) failed. Got %v, expected 4", v)}
}

之后转到src目录下,执行:

go install simplemath
go install calc

最终的代码结构:

代码格式化

golang本身对格式化要求就非常严格,但是为了更方便,添加了格式化工具。比如要对simplemath包的源代码进行格式化,直接执行:

go fmt simplemath

代码测试

golang的特点是可以写代码与测试同时进行,每个文文件名称后面添加_test表示对应的测试文件。比如上述的add_test.go就是add.go的测试文件。以包为单位进行测试。比如测试整个simplemath包,转到src目录下,执行:

go test simplemath

测试结果输出:

ok      simplemath      (cached)

(cached)是之前测试过,第一次测试会出现测试时间。

说明文档

golang的另一个巨大的优势在于,可以直接在编码的时候,集成说明文档。而且说明文档可以像官网的文档那样规范美观,并直接在浏览器中阅读。
新建以工程,src新建一个FOO包,然后新建foo.go函数,之后文件中添加:

v// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file./*
这个包用于展示文档说明。整个文档的说明必须紧贴着package换行的话需要另起一行,下面可以添加BUG的说明
*/
package FOOimport "fmt"// this is a function note
// function print Hello, World!
func foo(){fmt.Println("Hello, World!")
}// BUG(jack): #1: I'm sorry but this code has an issue to be solved.
// BUG(tom): #2: An issue assigned to another person.

然后

go install FOO
go doc FOO

Golang的工程管理相关推荐

  1. 【GoLang】GoLang GOPATH 工程管理 最佳实践

    参考资料: MAC下 Intellij IDEA GO语言插件安装及简单案例:http://blog.csdn.net/fenglailea/article/details/53054502 关于wi ...

  2. Golang实践录:工程管理

    本文介绍Golang的工程管理. 工程概述 GOPATH目录下创建三个目录: src 存放源代码,每个工程一个单独的目录 pkg 编译过后生成的包文件存放目录,根据平台有不同目录,里面有许多.a库,暂 ...

  3. Golang 包的定义、引入和工程管理

    代码结构的编排是一门编程语言的基础,本文专门谈谈 Golang 包的定义.引入和工程管理,搞清楚 Golang 各个包之间是如何定义和引入的. 包的基本概念 在实际开发中,随着代码量越来越大功能越来越 ...

  4. 水利水电工程管理与实务电子版习题_水利水电工程管理与实务复习题集

    内容概要 为了帮助全国二级建造师执业资格考试水利水电专业应考人员进一步理解考试大纲和考试用书,加深对考点和知识点的理解和掌握,提高复习效率,巩固复习效果,提高应考人员的解题能力,本书编委会依据< ...

  5. 【Qt】Qt工程管理

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. QT Creator工程管理 04. Qt pro项目文件 05. pro文件的作用 06. Pro文件示例 07. 附录 ...

  6. go语言基础之工程管理和工作区介绍

    1.工程管理 在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场 ...

  7. 水库大坝安全监测系统/水利平台高保真原型/大坝安全监测分析预警系统 /工程监测/工程档案/环境量监测/位移监测/渗压监测/工程管理/报警管理/横河向位移监测/历史数据/工程档案/顺河向位移监测

    水库大坝安全监测系统/水利平台高保真原型/大坝安全监测分析预警系统 /工程监测/工程档案/环境量监测/位移监测/渗压监测/工程管理/报警管理/横河向位移监测/历史数据/工程档案/顺河向位移监测 Axu ...

  8. linux的工程管理器是,Linux工程管理器——make

    一.定义 工程管理器,顾名思义,是指管理较多的文件 Make工程管理器也就是个"自动编译管理器",这里的"自动"是指它能构根据文件时间戳自动发现更新过的文件而减 ...

  9. 2022年二级建造师《专业工程管理与实务(公路)》综合测试题及答案

    题库来源:优题宝公众号 2022年二级建造师<专业工程管理与实务(公路)>综合测试题及答案,根据最新专业工程管理与实务大纲与历年真题汇总编写,包含专业工程管理与实务常考重点题型与知识点,有 ...

最新文章

  1. 2019年4月28日
  2. 【Java Web开发指南】mybatis的Example[Criteria]的使用
  3. python 模拟浏览器下载文件-python爬虫:使用Selenium模拟浏览器行为
  4. SAP官方提供的人脸识别API
  5. 七0二所与江南计算机研究所,江南大学:一所被低估的“211”大学,2个A+学科,丝毫不输985...
  6. PIC18F26K20
  7. python在物联网中的应用_在物联网中应用机器学习
  8. 计蒜客 第一场 搜狗输入法
  9. 华师c语言程序设计作业,华师《C语言程序设计》练习题库答案
  10. WebService的知识总结(一)
  11. 第一阶段·Linux运维基础 第3章·文件属性、正则表达式、文件权限
  12. Matlab学习笔记(8)——hist函数
  13. ZOJ 1428 Magazine Delivery
  14. 理解PHP网页运行原理
  15. WT2605-24SS音频解码芯片,实现宠物(玩具)喂食器远程更新语音技术方案解析
  16. 谷粒商城项目笔记总结(1/2)
  17. 计算机工作原理采用科学家,课件:揭秘计算机工作原理.ppt
  18. SQL语句查询电影评分案例分析
  19. 时序动作定位 | 面向时序行为定位任务的无监督预训练
  20. 环境科学与生态学SCI期刊 高录用推荐

热门文章

  1. OpenCV:使用python-cv2实现Harr+Adaboost人脸识别
  2. 【已解决】Protocol ‘https‘ not on whitelist ‘file,crypto,data‘!
  3. 【干货】Python参考书籍
  4. Spring框架中提取list集合类型属性注入
  5. LeetCode 153. 寻找旋转排序数组中的最小值(二分)
  6. 【半年总结】---凤凰涅槃,历久弥新
  7. 数据库的文本处理函数
  8. 【GTK3.0】背景设置
  9. JS控制图片滚动的效果
  10. Android初学第87天