Go:如何组织代码
备注
此文主要是对官方教程的学习总结,官方教程:http://golang.org/doc/code.html。
工作空间(Workspaces)
Go代码必须保持在一个workspace,workspace是一个目录结构,他有三个子目录构成:
- src:包含了组成packages的源代码,一个目录就是一个package。
- pkg:包含了package objects(编译后的类库)。
- bin:包含了executable commands(编译后的可执行程序)。
go tool编译packages,然后将编译结果安装到pkg目录或bin目录,下面是一个湿示例:

GOPATH环境变量
GOPATH环境变量指向了Workspace的位置,如果没有设置的话,自己去设置一下,否则go install会执行失败。
包路径(Package Path)
标准类库的packages可以使用短名字,如:fmt。对于你自己的Packages,最好提供一个base path(基路径),这可以避免命名冲突,下面是我的命名原则:
happygo.codeplex.com/study(源代码服务提供商仓库/项目)。
你的第一个程序
选择一个包路径
happygo.codeplex.com/study/hello
hello.go
package main //command executable(命令行可执行程序)必须使用main作为package名字。
import "fmt"
func main() {
fmt.Print("你好,世界!\n")
}
项目结构

你的第一个类库
选择一个包路径
happygo.codeplex.com/study/hellolib
hellolib.go
package hellolib
func Max(x int, y int) int {
if x >= y {
return x
}
return y
}
修改hello.go,调用类库
package main import (
"fmt"
"happygo.codeplex.com/study/hellolib"
) func main() {
fmt.Print("你好,世界!\n")
fmt.Printf("2 和 3中最大的是 %d!", hellolib.Max(2, 3))
}
项目结构

注意:Go使用静态链接(会将所依赖的代码链接到一个文件)。
包名字(Package Name)
Go源文件必须以包声明开始:
package name
一些规则:
- 一个package(文件件)中的所有文件必须使用相同的名字。
- Go语言约定import path(导入路径)的最后一个元素是包名字。
- Executable Commands必须使用 package main。
测试集成
Go提供了 go test 命令和 testing package帮助我们做测试,下面是测试的组织规则:
- 文件必要以 _test.go 结尾。
- 函数名必须包含如下签名:func TestXXX(t *testing.T)。
hellolib_test.go
package hellolib
import "testing"
func TestMax(t *testing.T) {
const x, y = 2, 3
max := Max(x, y)
if max == x {
t.Error("Max错误!")
}
}
备注
大环境搞明白了,语法就快了,再用一天时间学习一下语法,然后用Google App Engine开发个应用试试。
Go:如何组织代码的更多相关文章
- DDD:订单管理 之 如何组织代码
背景 系统开发最难的是职责的合理分配,或者叫:“如何合理的组织代码”,今天说一个关于这方面问题的示例,希望大家多批评. 示例背景 参考数据字典 需求 OrderCode必须唯一. Total = Su ...
- Flask实战-留言板-安装虚拟环境、使用包组织代码
Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...
- Python基础-修改excel、redis、接口开发、组织代码
pymysql模块补充内容 1. 游标.description():显示表的字段属性 (什么是游标:游标用于交互式应用,就好比word里的光标一样,要修改某个地方,要先把光标移动到这里) 用好这个方法 ...
- Unity3D如何有效地组织代码?(转)
问题: Unity3D可以说是高度的Component-Based Architecture,同时它的库提供了大量的全局变量.如何来组织代码呢? 答: - Unity有一些自身的约定,譬如项目里的Ed ...
- 求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?
go语言的开发工具推荐? go语言开发普通程序及开发web程序的时候,应该以哪种目录结构组织代码? 求推荐go语言开发工具及go语言应该以哪种目录结构组织代码? >> golang这个答案 ...
- Unity3D如何有效地组织代码?
本文整理自知乎,原文链接:http://www.zhihu.com/question/21070379 问题: Unity3D可以说是高度的Component-Based Architecture,同 ...
- .NET C#基础(6):命名空间 - 组织代码的利器
0. 文章目的 面向C#新学者,介绍命名空间(namespace)的概念以及C#中的命名空间的相关内容 1. 阅读基础 理解C与C#语言的基础语法 2. 名称冲突与命名空间 2.1 一个生活例 ...
- requirejs实验001.对我来说,用AMD的方式来组织代码并不轻松.
http://www.requirejs.org/ http://www.requirejs.cn/ http://requirejs.readthedocs.org/en/1.0.1/ 目录结构: ...
- webapp的favicon应该怎样组织代码
处理过那么多index 页面了那么关于特别针对于此页的favicon是时候详细的总结一下了 它是网站的头像,它出现在浏览器的收藏夹中(标题的旁边) ,浏览器标签页的左上角,微信公众号的logo,保存网 ...
随机推荐
- oracle 一个网站
http://www.oracle.com/technetwork/cn/articles/11g-pivot-101924-zhs.html
- Codeigniter的一些优秀实践
最近准备接手改进一个别人用Codeigniter写的项目,虽然之前也有用过CI,但是是完全按着自己的意思写的,没按CI的一些套路.用在公众的项目,最好还是按框架规范来,所以还是总结一下,免得以后别人再 ...
- js监测设备类型【安卓,ios,苹果微信,电脑pc】
话不多说上代码: 1.判断是不是微信 function is_weixn(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/Mic ...
- UVA12995 Farey Sequence [欧拉函数,欧拉筛]
洛谷传送门 Farey Sequence (格式太难调,题面就不放了) 分析: 实际上求分数个数就是个幌子,观察可以得到,所求的就是$\sum^n_{i=2}\phi (i)$,所以直接欧拉筛+前缀和 ...
- Java常用工具类之RegexpUtils,正则表达式工具类
package com.test.core.util; import org.apache.log4j.Logger; import org.apache.oro.text.regex.Malform ...
- 备份Kylin的Metadata
元数据是Kylin中最重要的数据之一,备份元数据时运维工作中一个至关重要的环节.只有这样,在由于误操作导致整个Kylin服务或某个Cube异常时,才能将Kylin快速从备份中恢复出来. Kylin组织 ...
- ubuntu 安装qq 及解决安装完搜狗输入法不显示键盘的方法
安装qq: https://zhuanlan.zhihu.com/p/27549700 解决搜狗输入法不显示的问题: http://blog.csdn.net/crystal_zero/article ...
- Python中__new__()方法的使用和实例化
new()是在新式类中新出现的方法,它作用在构造方法init()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法init()负责将类的实例化,而在init()调用之前,new()决 ...
- GC参数
串行收集器 串行收集器(Serial),是一个相对比较老的回收器,但是它的效率在回收器中相对较好,并且比较稳定.他在进行垃圾回收的过程中,使得应用暂时被挂起,然后启用单条线程去做垃圾回收,所以在进行垃 ...
- CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析
漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...