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,保存网 ...
随机推荐
- python【项目】:基于socket的FTP服务器
功能要求 1. 用户加密认证 2. 服务端采用 SocketServer实现,支持多客户端连接 3. 每个用户有自己的家目录且只能访问自己的家目录 4. 对用户进行磁盘配额.不同用户配额可不同 5. ...
- csu 1329 一行盒子(链表操作)
1329: 一行盒子 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 693 Solved: 134 [Submit][Status][Web Boa ...
- python开发学习-day02(元组、字符串、列表、字典深入)
s12-20160109-day02 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- video.js分段自动加载视频【html5视频播放器】
突发奇想的需求,要在官网上放一个一个半小时的视频教程…… 然而,加载成了问题,页面是cshtml的.net混合网站,不知道哪儿的限制,导致视频加不出来. 没有办法,只能前端想办法了. 于是将视频切割成 ...
- 在LoadRunner中从数组类型的参数随机取值的方法
在LoadRunner中从数组类型的参数随机取值的方法 使用web_reg_save_param做关联后,有时候会有多个匹配值. 为了模仿用户行为随机取一个值为后续transcation所用,可以使用 ...
- RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem)
RSA私钥和公钥文件格式 (pkcs#1, pkcs#8, pkcs#12, pem) 2018年03月07日 11:57:22 阅读数:674 Format Name Description PKC ...
- SpringBoot入门系列
集合redis,mysql,测试例子 http://blog.csdn.net/lxhjh/article/details/51764604
- 解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
CentOS7中执行 service iptables start/stop 会报错Failed to start iptables.service: Unit iptables.service fa ...
- Python 爬虫笔记(二)
个人笔记,仅适合个人使用(大部分摘抄自python修行路) 1.使用selenium(传送) selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及 ...
- 洛谷P2243 电路维修 [最短路]
题目传送门 电路维修 题目背景 Elf 是来自Gliese 星球的少女,由于偶然的原因漂流到了地球上.在她无依无靠的时候,善良的运输队员Mark 和James 收留了她.Elf 很感谢Mark和Jam ...