一个导出包内符号的合适的方法,用于 golang 工程

2020-04-26 13:15:59 +08:00
 fumeboy

具体的内容请阅读: https://github.com/fumeboy/a-way-to-export-symbols

背景

在小型 golang 项目中,随意地使用大写字母开头的命名来导出符号是很轻松的,没有太大的阅读包袱。

但是当项目变得很大时,大写字母开头的命名则很难做好视觉上或其他方面上的提醒,在当项目转手时,它对于新程序员的上手是个不小的折磨。

这个时候我们需要一个好的方法来进行包内符号的导出

方法内容

很简单,没有什么魔法。

一句话概括: 把 包内符号的导出 放在特定的文件中进行。

假如 我有一个包,它是 pkg_example,这个包里我有这些符号需要导出:

// inner.go
type inner_typ_a int
type inner_typ_b int

func inner_fn_a(){}
func inner_fn_b(){}

var inner_var_a = 1
var inner_var_b = 1

但是我并不直接修改它们的名字,而是给 pkg_example 创建一个特定的文件:exports.go

在这个文件里,创建这些符号的别名,这些别名是被导出的:

// exports.go
type (
	TYP_a = inner_typ_a
	TYP_b = inner_typ_b
)

var (
	FN_a = inner_fn_a
	FN_b = inner_fn_b
)

var (
	VAR_a = inner_var_a
	VAR_b = inner_var_b
)

就是这么简单

注意

仅当在给变量做别名时,需要额外的考虑:

var VAR_a = inner_var_a 这句赋值发生时,inner_var_a 是否已经初始化了?

若没有初始化,VAR_a 得到的是一个“空值”而不是初始化后的 inner_var_a

1675 次点击
所在节点    Go 编程语言
6 条回复
buried
2020-04-26 13:22:39 +08:00
这个算是一种开发规范吗?
fumeboy
2020-04-26 13:26:02 +08:00
@buried 我是这样想的,它的功效就像 API doc 或者目录一样
bwangel
2020-04-26 13:28:05 +08:00
scnace
2020-04-26 13:31:01 +08:00
这个 export.go 应该可以根据某种(能被 go/ast 解析的)规则自动生成(我们之前也有写差不多的东西来做 package migration
buried
2020-04-26 13:35:58 +08:00
@fumeboy #2 那不是有 godoc 么
reus
2020-04-26 13:50:25 +08:00
…………我一行 go doc 就能输出文档,要你这个干啥?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666243

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX