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. Python笔记⑤爬虫

    爬虫的前奏 # 爬虫前奏 # 明确目的 # 找到数据对应的网页 # 分析网页的结果找到数据所在的标签位置 # 模拟HTTP请求,向服务器发送这个请求,获取到服务器返回给我们的HTML # 用正则表达式 ...

  2. 一次从Github向Gitee迁库踩坑记录

    先上结论:gitee的lfs功能收费,直接从github迁移包含lfs管理的文件会出错,配置lfs.url即可解决问题 Q: 为什么要迁库呢? A: github访问太慢了,不然我也不想费这个功夫! ...

  3. 栈结构Stack

    package seday12; import java.util.Deque; import java.util.LinkedList; /** * @author xingsir * 栈结构. 栈 ...

  4. Mac OS删除文件夹和文件的命令

    https://www.jianshu.com/p/0376bf0514e3 2017.08.18 17:27* 字数 219 阅读 16709评论 0喜欢 0 rmdir删除空目录,不过一旦目录非空 ...

  5. Python 文件和目录操作学习

    文件与文件路径 文件有两个关键属性:文件名和路径. 路径指明了文件在计算机上的位置. 文件名中,最后一个句点之后的部分称为文件的"扩展名",它指出了文件的类型 目录也叫文件夹,文件 ...

  6. java是什么

    Java是一个纯的面向对象的程序设计语言 java是一种强类型语言,特点是: 1,跨平台 2,面向对象 3,简单易用 跨平台指的是只要有java虚拟机的平台,都可以运行java代码. Java继承了C ...

  7. 吴裕雄--天生自然PythonDjangoWeb企业开发:学员管理系统- 前台

    开发首页 做一个简单的用户提交申请的表单页面. 首先在student/views.py文件中编写下面的代码: # -*- coding: utf-8 -*- from __future__ impor ...

  8. Linux环境查看Java应用消耗资源情况

    linux线上资源耗时定位 https://www.cnblogs.com/wuchanming/p/7766994.html 1. jps -ml 查看服务器上运行的Java程序 2. jmap 查 ...

  9. centso7设置防火墙

    CentOS 7默认使用的是firewall作为防火墙,使用iptables必须重新设置一下 1.直接关闭防火墙 1 2 3 systemctl stop firewalld.service #停止f ...

  10. 使用jquery select2实现下拉框搜索功能

    由于公司后台系统下拉框数据量太多了,用户操作起来要不方便所以增加了下拉框里面一个搜索功能 1从官网下载jquery select2 下来 地址https://select2.github.io/ 2: ...