zoukankan      html  css  js  c++  java
  • Go笔记之一:工程项目结构的注意事项

    Go笔记之一:工程项目结构的注意事项


    对 Go 项目目录的理解 (Windows平台为例)

    刚安装完的 Go 需要设定环境变量,最关键的环境变量有三个,GOROOT、GOPATH和GOBIN。GOROOT应该设定为 GO 在当前环境下的安装根目录,通常因为 windows 平台都是由安装工具安装完成,因此 windows 平台一般不需要设置。GOPATH 理解为是开发者的“工作区”,即表示进行开发编译 Go 程序的工作区,因此 GOPATH 允许设定多值。而 GOBIN 在 GOPATH 被设定为多值时发挥作用,即用于存放由 go install 命令产生的可执行文件。

    用一个项目具体举例

    项目取名 calcproj,包含一个可执行程序 calc.exe和一个独立库,项目结构如下

    > calcproj
    > |--calc.go
    > |--lib
    > |--less.go
    

    less.go 实现了自定义类型:Integer,并提供了一个方法 Less( b Integer ),该方法实现返回当前值是否小于参数值的结果

    package lib
    
    type Integer int
    
    func (a Integer) Less(b Integer) bool {
    return a < b
    }
    

    calc.go 是入口 main,调用 Less 方法并打印出结果,为了方便,main函数中的赋值被固定

    package main
    
    import(
    "fmt"
    "lib"
    )
    
    func main(){
    
    var a lib.Integer = 3
    fmt.Println(a, a.Less(2));
    }
    

    进入 src 目录运行 go build calc.gogo build,在src目录下获得可执行文件calc.exe,使用命令行工具运行,得到结果

    C:cinlapgocalcprojsrc>calc.exe
    3 false
    

    由书+实践+热心网友得到的经验总结

    • [x] Go的项目可以以自定义名称开头,如myhelloTxtReader等等
    • [x] 在项目目录下,按照 Go 的规则(至少)建立src目录
    • [x] 以src为根目录,main包就放在src下,如果有其它包(如C#中的dll),就建子目录。子目录名字就是包名称,其下的 go 文档开头的也要符合该格式 package 包名称(目录名)
    • [x] 如何正确的对待命令源码文件
    • [x] 当代码包有且仅有一个命令源码文件时,在所在目录中执行go build命令,即可在该目录下生成一个与目录同名的可执行文件;若使用go install命令,则可在当前工作区bin目录下生成相应的可执行文件
    • [x] 命令源码文件不能与库源码文件在同一个代码包,否则无法正确执行go buildgo install命令
    • [x] 同一个代码包中可以有多个命令源码文件,通过go run命令分别运行,但这会使go buildgo install命令无法编译和安装该代码包。

    感谢

    特别感谢Go语言技术交流群的 @【副总】西安-n1ce和@【总裁】重庆-im帥

    参考资料

    • 参考书籍:《Go并发编程实战》
    • 参考书籍:《Go语言编程》
  • 相关阅读:
    [环境]Java 环境变量
    [BZOJ 4008][HNOI2015]亚瑟王(期望Dp)
    [BZOJ 3295][Cqoi2011]动态逆序对(CDQ分治)
    [BZOJ 3668&UOJ #2][Noi2014]起床困难综合症(贪心)
    [BZOJ 4571][Scoi2016]美味(主席树)
    [BZOJ 4408][Fjoi 2016]神秘数(主席树+思路)
    [BZOJ 2212][Poi2011]Tree Rotations(线段树合并)
    [BZOJ 4592][Shoi2015]脑洞治疗仪(线段树)
    [BZOJ 2054]疯狂的馒头(并查集)
    [BZOJ 1455]罗马游戏(左偏树+并查集)
  • 原文地址:https://www.cnblogs.com/cinlap/p/8479466.html
Copyright © 2011-2022 走看看