V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
fumeboy
V2EX  ›  Go 编程语言

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

  •  
  •   fumeboy · 2020-04-26 13:15:59 +08:00 · 1654 次点击
    这是一个创建于 1432 天前的主题,其中的信息可能已经有所发展或是发生改变。

    具体的内容请阅读: 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

    6 条回复    2020-04-26 13:50:25 +08:00
    buried
        1
    buried  
       2020-04-26 13:22:39 +08:00
    这个算是一种开发规范吗?
    fumeboy
        2
    fumeboy  
    OP
       2020-04-26 13:26:02 +08:00
    @buried 我是这样想的,它的功效就像 API doc 或者目录一样
    scnace
        4
    scnace  
       2020-04-26 13:31:01 +08:00 via Android
    这个 export.go 应该可以根据某种(能被 go/ast 解析的)规则自动生成(我们之前也有写差不多的东西来做 package migration
    buried
        5
    buried  
       2020-04-26 13:35:58 +08:00
    @fumeboy #2 那不是有 godoc 么
    reus
        6
    reus  
       2020-04-26 13:50:25 +08:00
    …………我一行 go doc 就能输出文档,要你这个干啥?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3009 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 14:56 · PVG 22:56 · LAX 07:56 · JFK 10:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.