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.go或go build,在src目录下获得可执行文件calc.exe,使用命令行工具运行,得到结果
C:\cinlapgo\calcproj\src>calc.exe
3 false
由书+实践+热心网友得到的经验总结
- [x] Go的项目可以以自定义名称开头,如
myhello、TxtReader等等 - [x] 在项目目录下,按照 Go 的规则(至少)建立
src目录 - [x] 以
src为根目录,main包就放在src下,如果有其它包(如C#中的dll),就建子目录。子目录名字就是包名称,其下的 go 文档开头的也要符合该格式package 包名称(目录名) - [x] 如何正确的对待命令源码文件
- [x] 当代码包有且仅有一个命令源码文件时,在所在目录中执行
go build命令,即可在该目录下生成一个与目录同名的可执行文件;若使用go install命令,则可在当前工作区bin目录下生成相应的可执行文件- [x] 命令源码文件不能与库源码文件在同一个代码包,否则无法正确执行
go build和go install命令- [x] 同一个代码包中可以有多个命令源码文件,通过
go run命令分别运行,但这会使go build和go install命令无法编译和安装该代码包。
感谢
特别感谢Go语言技术交流群的 @【副总】西安-n1ce和@【总裁】重庆-im帥
参考资料
- 参考书籍:《Go并发编程实战》
- 参考书籍:《Go语言编程》
Go笔记之一:工程项目结构的注意事项的更多相关文章
- thinkphp学习笔记1—目录结构和命名规则
原文:thinkphp学习笔记1-目录结构和命名规则 最近开始学习thinkphp,在下不才,很多的问题看不明白所以想拿出来,恕我大胆发在首页上,希望看到的人能为我答疑解惑,这样大家有个互动,学起来快 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
- 《Linux就该这么学》培训笔记_ch06_存储结构与磁盘划分
<Linux就该这么学>培训笔记_ch06_存储结构与磁盘划分 文章最后会post上书本的笔记照片. 文章主要内容: Linux系统的文件存储结构(FHS标准) 物理设备命名规则(udev ...
- matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields
一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...
- URL(统一资源定位符)结构和注意事项
URL的常见结构: http://localhost/项目名称/文件1/文件2... 注意事项: 当我们在项目中在书写URL的时候,一般会出现两种情况: 第一种:在路径前面加上/,表示直接连在loca ...
- Swift 学习笔记 (类和结构体)
类和结构体是一种多功能且灵活的构造体.通过使用与现存常量 变量 函数完全相同的语法来在类和结构体中定义属性和方法以添加功能. Swift中不需要你为自定义的类和结构体创建独立的结构和实现文件.在Swi ...
- Solr6.7 学习笔记(01) -- 目录结构
Solr解压后的目录结构 --contrib: Solr的一些扩展 --analysis-extras: 包含一些文本分析组件及其依赖 --clustering: 包含一个用于集群搜索结果的引擎 -- ...
- <<代码大全>>阅读笔记之一 使用变量的一般事项
一.使用变量的一般事项 1.把变量引用局部化 变量应用局部化就是把变量的引用点尽可能集中在一起,这样做的目的是增加代码的可读性 衡量不同引用点靠近程度的一种方法是计算该变量的跨度(span) 示例 a ...
- 数据结构 浙大MOOC 笔记二 线性结构
线性表及其表现 第二章的内容是关于三种最基本的数据结构 结合<DDSA>第三章 表.栈和队列做一个总结 首先简单说明一下各个数据结构的特点: 数组:连续存储,遍历快且方便,长度固定,缺点是 ...
随机推荐
- LoadRunner压力测试实例
1 LoadRunner 概要介绍... 2 .项目背景介绍... 5 .使用LoadRunner进行负载/ 实施测试... 16 6.1 Memory相关... 22 6.2 Processor相关 ...
- java工具类(七)实现给定任意年份和月份得出天数
Java实现给定任意年份和月份,输出该月有多少天 项目开发过程中,细节性的地方需要判定某年某月多少天,写了个下面的小工具解决了此问题. package weiming.lmapp.utils; pub ...
- Leetcode_231_Power of Two
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/47334243 Given an integer, writ ...
- Objective-C的面向对象特性(二)
在Objective-C语言中, 类别.类扩展(也称为匿名类别)以及协议是Objective-C 语言级别支持的模式,用来实现对类进行功能扩展. 一.类别--用来增加方法到已存在类 声明一个类别的语法 ...
- SoC嵌入式软件架构设计
内存是SoC(System on Chip,片上系统)集成设计的重要模块,是SoC中成本比重较大的部分.内存管理的软硬件设计是SoC软件架构设计的重要一环,架构设计师必须要在成本和效率中取得平衡,做到 ...
- 【14】-java的单例设计模式详解
预加载模式 代码: public class Singleton { private volatile static Singleton singleton = new Singleton(); pr ...
- 关于L298N的应用
最近在开发一个基于STM32的智能小车,用的底板是野火ISO mini的板子.如图: 这里有个电机驱动模块L298N,说起它,我还真的泪奔,前阵子被卖家坑了,拿上去一接电源马上就烧了,这都怪我粗心大意 ...
- 【省带宽、压成本专题】深入解析 H.265 编码模式,带你了解 Apple 全面推进 H.265 的原因
过去几年,又拍云一直在点播.直播等视频应用方面潜心钻研,取得了不俗的成果.我们结合点播.直播.短视频等业务中的用户场景,推出了"省带宽.压成本"系列文章,从编码技术.网络架构等角度 ...
- Java不走弯路教程(5.Client-Server模式(2)-Client)
5.Client-Server模式(2)-Client 在上一章,我们完成一个简单的数据库服务器,并在客户端用telnet方式成功进行通信. 本章将用Java实现客户端程序,来代替telnet. 先看 ...
- shc/unshc加/解密shell脚本
一.加密软件shcshc是linux的一款加密脚本的插件东西比较安全我们可以利用wget将文件放在root目录下也可以通过sftp放在root目录也可以直接利用cd命令选择目录一切随意shc官网:ht ...