Golang编程的工程管理

                             作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.工作区概述

1>.GOROOT和GOPATH

  GOROOT:
  GOROOT的值应该是安装Go的根目录。   GOPATH:
    我们需要将工作区的目录路径添加到环境变量GOPATH中。否则,即使处于同一个工作区(事实上,未被加入GOPATH中的目录不应该称为工作区),代码之间也无法通过绝对代码包路径调用。
    在实际开发环境中,工作区可以只有一个,也可以有多个,这些工作区的目的路径都需要添加到GOPATH中。与GOROOT意义,我们应该确保GOPTAH一直有效。   温馨提示:
    GOPATH中不要包含Go语言的根目录(GOROOT),以便将Go语言本身的工作区通用户工作区严格分开。
    通过Go工具中的代码获取命令go get,可将指定项目的源码下载到我们在GOPATH中设定的第一个工作区中,并在其中完成编译和安装。

2>.GOPATH工作区的目录结构说明

  一般情况下,Go源码文件必须放在工作区中。但是对于命名源码文件来说,这不是必须的。工作区其实就是一个对应于特定工厂的目录,它应该包含三个子目录,即src目录,pkg目录和bin目录。

  接下来我们对GOPATH指定的工作目录的三个子目录功能分别进行说明:
    src目录:
      用于以代码包的形式组织并保存Go源码文件,这里的代码包与src下的子目录一一对应。
      例如,若一个源码文件被声明属于代码包log,那么它就应当保存在src/log目录中。
      当然,你也可以把Go源码文件直接放在src目录下,但这样Go源码文件就只能被声明属于main代码包了。
      除非用于临时测试或演示,一般还是建议把Go源码文件放入特定的代码中。     pkg目录:
      用于存放通过go install命令安装后的代码包的归档文件,前提是代码包中必须包含Go库源码文件。另外,归档文件是指那些名称以".a"结尾的文件。
      该目录与GOROOT目录下的pkg目录功能类似。区别在于,工作区中的pkg目录专门用来存放用户代码的归档文件。
      编译和安装用户代码的过程一般会以代码包为单位进行。比如log包被编译安装后,将生成一个名为log.a的归档文件,并存放在当前工作区的pkg目录下的平台相关目录中。     bin目录:
      与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件。
      在类Unix操作系统下,这个可执行文件一般来说名称与源码文件的主文件名相同。
      而在windows操作系统下,这个可执行文件的名称则是源码文件主文件名加".exe"后缀。     目录src用于包含所有的源代码,是Go命令行工具一个强制的规则,而pkg和bin则无需手动创建,如果必要Go命令行工具在构建过程中会自动创建这些目录。

 

二.命令源码文件,库源码文件和测试源码文件的区别

  命名源码文件:
    指的是声明属于main代码包并且包含无参数声明和结果声明的main函数的源码文件。
    这类源码文件是程序的入口,它们可以独立运行(使用go run命令),也可以通过go build或go install命令得到相应的可执行文件。
    综上所述,我们可以总结为:如果一个源码文件被声明属于main代码包,且该文件中包含无参数声明和结果声明的main函数,则他就是命名源码文件。命名源码文件可通过go run命令直接运行。
  库源码文件:
    指的是在于某个代码包中的普通源码文件。
    通常,库源码文件声明的包名会与它直接所述的代码包(目录)名一致,且库源码文件中不包含无参数声明和无结果声明的main函数。

  测试源码文件:
    测试源码文件是一种特殊的库文件,可以通过go test命令运行当前代码包下的所有测试源码文件。成为测试源码文件中的充分条件有以下两个:
      (1)文件名需要以"_test.go"结尾;
      (2)文件中需要至少包含一个名称以Test开头或Benchmark开头,且拥有一个类型为*testing.T或*testing.B的参数的函数(testing.T和testing.B是两个结构体类型。而*testing.T和*testing.B则分别为前两者的指针类型。它们分别是功能测试和基准测试所需的);

  Go代码的文本文件需要以UTF-8编码存储。如果源码文件中出现了非UTF-8编码的字符,那么在运行,编译或安装的时候,Go命令会抛出"illegal UTF-8 sequence"错误提示。

三.多文件编程

1>.blog包中的"login.go"文件

package blog

import (
"fmt"
) /*
函数名称首字母大写可以被其它包访问
*/
func Login() {
fmt.Println("login successful")
} /*
函数名称首字母小写,不可以被其它包访问
*/
func sayHello() {
fmt.Println("你瞅啥?")
} /*
函数名称首字母大写可以被其它包访问
*/
func SayHello() {
fmt.Println("瞅你咋地")
}

2>.yinzhengjie包中的"11.工程管理.go"文件

package main

import (
"blog"
) func main() {
blog.Login()
blog.SayHello()
}

3>.调用关系如下图所示

Golang编程的工程管理的更多相关文章

  1. Go语言 函数,工程管理

    Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...

  2. make工程管理器

    1.概述 大型程序中,人们希望工具自动识别修改的文件,而且不需要输入冗长的命令,就可以进行编译链接等操作,于是make工程管理器应运而生. make可以自动识别文件时间戳,只处理修改的文件: make ...

  3. golang编程之我见

    golang编程之我见 学习了两个月的golang,语法算是基本掌握了,从一个C++程序员的角度,提出自己的几个看法吧. 1,没有一个好的包管理工具. 我在公司用的是glide的包管理,这个工具的好处 ...

  4. 使用BLADE构建c++工程管理

    使用BLADE构建c++工程管理 字数764 阅读2753 评论2 喜欢4 一. c++工程依赖管理 之前在百度一直使用comake2构建c++项目,十分方便.免去了手写Makefile的痛苦,很多项 ...

  5. emacs工程管理,cedet ede插件自动构建Make,Automake

    鉴于自己一直都是在做客户端开发方面的工作,服务端很多知识都随着时间淡忘了,最近有一个计划,用一些时间补一下基础.所以早上很早就起床,花了一点时间大致浏览了一下BSD socket的相关API,然后用G ...

  6. Makefile 工程管理

    Makefile 工程管理 Makefile 规则 --变量 在Makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量 $^:代表所有的依赖文件 $@:代表目标 $&l ...

  7. 编程实战——电影管理器之界面UI及动画切换

    编程实战——电影管理器之界面UI及动画切换 在前文“编程实战——电影管理器之利用MediaInfo获取高清视频文件的相关信息”中提到电影管理器的目的是方便播放影片,在想看影片时不需要在茫茫的文件夹下找 ...

  8. 学习总结:工程管理与makefile

    工程管理与makefile 一.为什么需要makefile和make 一个工程中的源文件可能很多,按照类型.功能.模块分别放在若干个目录中,为了有效地管理软件工程,更高效地编译整个工程,需要用到mak ...

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

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

随机推荐

  1. state thread api 查询

    state thread api 查询: http://state-threads.sourceforge.net/docs/reference.html

  2. php 基础 PHP保留两位小数的几种方法

    $num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2); //10.46 //第二种:利用sprintf格式化字符串 $format_ ...

  3. 工具 - PyCharm相关

    Ctrl + Q查看Documentation Ctrl + Alt + L 格式化代码 """""" + enter就可以自动生成DocS ...

  4. 误删Django的model中的表解决办法

    误删Django的model中的表解决办法 1.model里面的表格实际的操作都在migrations文件夹中,里面记录了操作过程,当在database和model中删除表格时要注意初始化数据库时会报 ...

  5. pymongo 用户密码连接

    # db mongodbdb_mongo_attr = { 'host': '*', 'port': 27, 'database':'tease', 'username':'*v', 'passwor ...

  6. MySQL之正则

    八:正则匹配: 语法: select * from 表名 where 字段名 regexp "正则表达式"; PS:MySQL中正则匹配,不能使用\w等字幕作为匹配

  7. 15 JavaScript弹窗(警告框alert、确认框confirm、提示框Promt)

    警告框:window.alert().通常用于确认用户可以得到某些信息 <body> <script type="text/javascript" charset ...

  8. 腾讯玄武实验室向(CNVD)提交了一个重大漏洞“BucketShock”

    导读 11 月 21 日,在小米 IoT 安全峰会上,腾讯安全玄武实验室负责人于旸(花名:TK 教主)在演讲中透露,腾讯玄武实验室最近向国家信息安全漏洞共享平台(CNVD)提交了一个重大漏洞“Buck ...

  9. 帆软FineReport报表由于使用HTML显示后无法控制行高

    问题:帆软FineReport报表由于使用HTML显示后无法控制行高. 原因:首先每行的第一个单元格是以HTML显示的,然后,数据库查询的数据集中,sql语句中包含这个代码:'<pre>' ...

  10. java基础复习-自定义注解4(结合JDBC技术,打造类表映射微框架)

    写在前面: 1.该框架为自己所写的第一个框架类产品,可能有着许多不足的地方,读者可以到评论区指出.同时,该微框架的源码也会开源至博客中,够后来的学习者借鉴.由于该框架逻辑结构稍些复杂,不可能花大量篇幅 ...