博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
How to Write Go Code
阅读量:6281 次
发布时间:2019-06-22

本文共 1823 字,大约阅读时间需要 6 分钟。

本文为官方文档How to Write Go Code的阅读总结:

概览

  • 介绍一些基本概念和规范。
  • 介绍如何写package和使用go tool。

代码结构

go tool要求代码结构遵循固定的规范。

规范概要

  • 所有go代码都放在一个workspace下,也就是workspace下包含多个repository。
  • 每个repository可以包含多个package,每个package也可以包含多个go代码文件。
  • package所在目录的路径就是它的import path。

workspace

默认是$HOME/go,可以通过GOPATH环境变量修改。

  • workspace下的src子目录用于存放repository源码。
  • bin子目录用于存放go tool生成的可执行文件。

注意点:文中说workspace下不应使用软链,原因尚不明确。

GOPATH

GOPATH环境变量的作用是指定workspace的路径。

可以通过执行go env GOPATH检查确认当前的workspace设置。

技巧:go env可以查看所有GO环境变量。

import paths

package类型可以分三种:

  • go语言标准库里的package。
  • 本地workspace下的package。
  • 远端repository。

注意点:自己的package不要跟标准库的package名字相同。

first program/library and using go tool

首先创建一个目录作为package,然后在这个package下编写代码文件。

文中将代码分成了两个类型

  • 待main函数的代码,叫command source或program。
  • 不带main函数的代码,叫package source或library。

go tool

  • 对于command source,执行go install package会编译生成可执行文件,并安装到bin子目录。
  • 对于package source,执行go install package会生成.a目标文件,放在 pkg子目录。(本人测试过。)

另说明:文中提到执行go build package会将编译后的package放在local build cache中,经查1.10以前的版本没有build cache,按照本人测试机1.9.4版本go help build的说法,对于non-main package,go build package执行完后会删除目标文件,因此只起到证明package可以build的作用。

技巧及注意点:

  • go tool命令后面跟的package名,必须是相对src目录的路径,不是相对当前目录的路径。
  • 当前目录是package时,可以直接执行go tool命令,不用跟package名。
  • go tool只会在出错时有输出,因此无输出就是执行正常。

package name

几条规则和规范:

  • 所有go代码文件第一行必须是package name。
  • 同一个package里的代码文件必须是同一个package name。
  • 按惯例,package name就是import path的最后一级目录名。
  • 可执行代码文件必须是package main。
  • package name没有必要是唯一的,只需要import path唯一即可。

Test

go语言包含一个轻量级的测试框架,有两部分:

  • 一个package:testing。
  • 一个命令:go test package。

规范:

  • 测试代码文件以*_test.go命名。
  • import “testing”。
  • 测试函数以TestXXX命名,以*testing.T为参数。
  • 调用t.Error或t.Fail表示失败。
package stringutilimport "testing"func TestReverse(t *testing.T){}

Remote packages

go get命令会执行fetch,build,install等步骤。

包含remote package的项目且remote package没被拉到本地时,需要用go get,用go install不行。

疑问

  • rune

参考资料

  • 1.10版本中才出现build cache:

转载于:https://blog.51cto.com/zxdlife/2294158

你可能感兴趣的文章
svn eclipse unable to load default svn client的解决办法
查看>>
Android.mk 文件语法详解
查看>>
QT liunx 工具下载
查看>>
内核源码树
查看>>
Java 5 特性 Instrumentation 实践
查看>>
AppScan使用
查看>>
Java NIO框架Netty教程(三) 字符串消息收发(转)
查看>>
Ucenter 会员同步登录通讯原理
查看>>
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>
docker centos环境部署tomcat
查看>>
JavaScript 基础(九): 条件 语句
查看>>
Linux系统固定IP配置
查看>>
配置Quartz
查看>>
Linux 线程实现机制分析
查看>>
继承自ActionBarActivity的activity的activity theme问题
查看>>
设计模式01:简单工厂模式
查看>>
项目经理笔记一
查看>>
Hibernate一对一外键双向关联
查看>>
mac pro 入手,php环境配置总结
查看>>