组织Go界面的最佳方式

时间:2010-05-21 22:38:44

标签: go

自从我用C ++编程以来已经很长时间了,但我知道在C ++中,类被组织成.h文件和.cpp文件。此外,许多其他语言也可以将代码拆分为目录结构中的逻辑分组,从而改善组织。

好吧,我正在努力学习Go,当我遇到界面时,我正在阅读Go for C++ Programmers文章。文章解释了Go中的接口基本上取代了类,并展示了如何很好地设置它们。

我想弄清楚的是我应该如何将界面组织成文件?例如,接口是否在一个文件中,而实现是在另一个文件中?

myInterface.go

type myInterface interface {
    get() int
    set(i int)
}


myImplementation.go

type myType struct { i int }
func (p *myType) set(i int) { p.i = i }
func (p *myType) get() int { return p.i }

我的代码在这里可能是错的,因为我还不完全知道我在做什么(如果我错了请纠正我),但这是设置它的最好方法吗?我很难想到如何在Go中组织代码,所以任何帮助都会受到赞赏!

大都市

2 个答案:

答案 0 :(得分:7)

无需将类型和接口放在单独的文件中。从每个导出的内容都很重要,您可以通过以大写字母开头来表示这些内容。在C&合。什么进入头文件很重要,因为这是“导入”(包括)的东西。在Go中,它是导入的包,并且它的内容如何组织成不同的源文件无关紧要(导入器无论如何都不会看到它)。

我个人的建议是避免创建不必要的文件。如果代码相对较短,请将其保存在一个文件中。如果它很长,那么考虑拆分它感觉很自然的部分(例如,如果你在Java或C ++中这样做,接口+相关函数可能会形成一个单独的类)。不要为了从代码中分离定义而拆分任何东西;即使它在C中也没有意义。

答案 1 :(得分:5)

Go编程语言不是C ++,也不是C.将其视为一种新语言。 Go与头文件无关。它只与C ++的类概念松散关联。由于您不是专业的C ++程序员,请忽略Go For C++ Programmers文章。

首先阅读A Tutorial for the Go Programming Language。然后阅读Effective Go。浏览The Go Programming Language Specification,这样您就可以知道在哪里查看。

Go是开源的,所以请查看真实的Go package documentationsource code

首先,请查看由Go的作者撰写的timedocumentationsource code。他们不使用单独的文件进行接口声明和实现,所以你为什么这么想?正如你自己所说,你还不知道自己在做什么,为什么不从专家设定的例子开始呢?

开发Go编程语言的一些动机来自于创建比C更好且比C ++简单得多的语言的愿望。考虑到Go的程序特征(通常是C类),诸如耦合和内聚的程序设计概念是有用的。在将Go time包分区为多个源文件时,这些概念很明显。一些类设计概念也很有用,但请记住,Go不支持继承。

正如尼克劳斯·沃斯在他的经典论文“逐步细化的程序开发”中所指出的,一个程序的早期草稿很少是理想的,有时甚至可能是草率的。即使最终版本也很少完美。例如,Go作者在几个月之后,最近改写了Go json包。

Go编程语言的设计和实现有助于使用许多小函数。它有利于简洁的解决方案。当然,许多功能都不会暴露在包装外。功能大小或数量的任意限制很少适用于任何语言。

  

Go程序是通过链接构建的   一起打包。一个包依次   由一个或多个来源构成   一起声明常量的文件,   类型,变量和函数   属于包裹,属于   可在所有相同的文件中访问   包。那些元素可能是   导出并在另一个包中使用。   Packages, The Go Programming Language Specification.

你想要第一个Go套餐做什么?询问可以回答的具体问题,并提供详细信息。