• Golang编程的工程管理


              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>.调用关系如下图所示

  • 相关阅读:
    新萝卜家园GHOST WIN7系统32,64位极速装机特别版
    BiliBili 第三方 Android 客户端应用源码
    高仿饿了么应用项目源码
    12306火车票订票项目源码
    美女的秘密项目源码
    漫画阅读应用源码
    高仿美团应用客户端布局源码
    Unix时间戳 和 NSDate 的转换
    NSJSONSerialization-JSON数据与NSDictionary和NSArray之间的转化
    ReactiveCocoa入门教程——第一部分
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12324291.html
Copyright © 2020-2023  润新知