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. adblock广告过滤

    1.在 img的 src中 出现 ad连在一起的情况,会被adblock过滤掉. 例如 <img id="adasdd" class="ad_mina" ...

  2. December 21st, Week 51st Saturday, 2019

    May the odds be ever in your favor. 愿好运永远眷顾你. From The Hunger Games. May we all have good luck, and ...

  3. Spring Boot Security JWT 整合实现前后端分离认证示例

    前面两章节我们介绍了 Spring Boot Security 快速入门 和 Spring Boot JWT 快速入门,本章节使用 JWT 和 Spring Boot Security 构件一个前后端 ...

  4. base64和图片的相互转换

    package czc.superzig.modular.utils; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; im ...

  5. Java基础 -4

    IF分支结构 在程序开发的过程中 一共会存在有三组程序逻辑:顺序结构.分支结构.循环结构 if分支结构主要是针对关系表达式进行判断处理的分支操作. if判断 public static void ma ...

  6. java记录1--接口

    接口(interface)定义:抽象方法和常量值的集合.本质上讲,接口是一种特殊的抽象类 ps:1.接口中定义的属性必须是public static final 的,定义的方法必须是public ab ...

  7. 该怎样应对IoT和边缘计算安全挑战

    导读 虽然智能家居的响应延迟似乎不是大问题,但如果自动驾驶汽车需要刹车,而数据出现延迟或者被黑客拦截或操纵,这可能造成灾难性后果.这里将需要边缘计算安全. 边缘计算可在靠近远程设备的位置提供计算.存储 ...

  8. Linux centosVMware Tomcat介绍、安装jdk、安装Tomcat

    一.Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开 ...

  9. redhat 7.6 find 命令

    1.按名字查找 find  ./    -name  filename    //精确查找 ,./ 代表当前目录   -name 查询名称 filename具体文件名称 find  ./    -na ...

  10. mkvirtualenv: 未找到命令的解决方法

    1.升级python包管理工具pip pip install --upgrade pip 备注:当你想升级一个包的时候 `pip install --upgrade 包名` 2.python虚拟环境安 ...