美文网首页
Go语言(golang)包设计哲学/原则与项目结构组织最佳实践

Go语言(golang)包设计哲学/原则与项目结构组织最佳实践

作者: imroc | 来源:发表于2017-09-03 15:11 被阅读0次

总结下Go的package设计哲学

  1. 明确目的
    • 在准备设计一个包之前,我们需要明确它的目的。
    • 包的命名就必须明确体现其目的,而不仅仅是为了存放代码。像标准库的io,http,fmt这些包名就很好,而像util.helper,common这种命名就是反面教材。
  2. 可用性
    • 想想使用这个包的人真正的需求,包的使用一定要直观、简单。
    • 在不断迭代开发、优化、完善的时候,不能让引用这个的程序出错。
    • 防止出现需要类型断言具体类型的需求。
    • 让单个包的代码量简化到最少,减少bug,易于掌控。
  3. 可移植性
    • 始终追求最高可移植性。
    • 如果包合理实用,就不要过多在意其它人的意见,没有适合所有人的完美的包。
    • 不要让包成为单一依赖点(即所有其它包都依赖它),每个包都有自己的设计目的,可能多个包会有重复的类型,即便重复定义也不要让包成为单一依赖点,这是API设计原则。

项目结构组织的最佳实践

有两种类型的项目,一种是生成可运行程序的项目(application project),另一种是专门用于被其它项目引用的套件项目(kit project)。
对于套件项目,结构组织根据实际项目用途而定,而对于可运行程序的项目,用这样的结构:
├── cmd
├── internal
└── vendor

vendor存放依赖包,internal存放本项目内部使用的包,cmd存放可运行的程序的代码,如果该项目有多个可运行程序,可以在cmd下建子目录。

注: internal可以被编译器识别,在internal下面的包是不能被其它项目引用的。

internal下面如果有很多包,并且它们需要用到一些相同的逻辑,比如加解密、网络请求等,可以在internal中建platform目录,存放内部使用的套件包,这样的结构:
├── cmd
├── internal
│ └── platform
└── vendor

注:platform下面的包如果成熟了,在未来它们你可以将其开源变成公有的套件项目,供别人的项目引用。

关于日志输出,公有的套件项目不要打印日志,因为它是要被其它项目引用的,打印日志的逻辑应该让可运行的项目自己来决定。

附上相关演讲视频:《Go语言面向包设计》

插播广告,go的http请求库req,让http请求简单到极致:https://github.com/imroc/req

相关文章

  • Go语言(golang)包设计哲学/原则与项目结构组织最佳实践

    总结下Go的package设计哲学 明确目的在准备设计一个包之前,我们需要明确它的目的。包的命名就必须明确体现其目...

  • 19年第34周:Go语言 有趣的接口

    一、Golang的接口 Go语言接口设计很符合设计原则参考图灵丛书中的《设计模式》 当我看到Golang的接口时,...

  • 9 Go盒子:包及包管理

    一、Go的包设计理念 1.代码盒子 在Go程序中,包是代码模块组织的单位,为项目代码组织结构,提高代码的可读性、重...

  • Golang源码之Channel

    引用 图解Golang的channel底层原理 深入理解Golang Channel Go语言设计与实现-Chan...

  • Golang:包的小知识

    在 Go 语言中,代码组织的形式是用包来组织,那么,我们有如下项目的目录结构 一般地,建议包名和文件夹的名称保持一...

  • golang unsafe 包

    阅读原文 golang unsafe 包 ArbitraryType 和 Pointer Go 语言是强类型语言,...

  • Mac上运行go项目

    1、下载Go语言安装包:https://golang.google.cn/dl/[https://golang.g...

  • Go核心编程-面向对象 [OOP]

    Golang也是支持面向对象(OOP)编程特性的语言,但是Golang中没有类(class),而Go语言的结构体(...

  • 简介

    官方网站 https://golang.org/ Go语言的特点及优势 (⼀)、Go语⾔设计初衷(为什么会设计Go...

  • 变量的基本类型与零值 golang

    最佳实践规范 go程序编写规范: 首行命名这个文件属于哪个包 往下再导入其他包 定义常量 定义全局变量 定义结构 ...

网友评论

      本文标题:Go语言(golang)包设计哲学/原则与项目结构组织最佳实践

      本文链接:https://www.haomeiwen.com/subject/vfhjjxtx.html