自从我用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中组织代码,所以任何帮助都会受到赞赏!
大都市
答案 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 documentation和source code。
首先,请查看由Go的作者撰写的time
包documentation和source code。他们不使用单独的文件进行接口声明和实现,所以你为什么这么想?正如你自己所说,你还不知道自己在做什么,为什么不从专家设定的例子开始呢?
开发Go编程语言的一些动机来自于创建比C更好且比C ++简单得多的语言的愿望。考虑到Go的程序特征(通常是C类),诸如耦合和内聚的程序设计概念是有用的。在将Go time
包分区为多个源文件时,这些概念很明显。一些类设计概念也很有用,但请记住,Go不支持继承。
正如尼克劳斯·沃斯在他的经典论文“逐步细化的程序开发”中所指出的,一个程序的早期草稿很少是理想的,有时甚至可能是草率的。即使最终版本也很少完美。例如,Go作者在几个月之后,最近改写了Go json
包。
Go编程语言的设计和实现有助于使用许多小函数。它有利于简洁的解决方案。当然,许多功能都不会暴露在包装外。功能大小或数量的任意限制很少适用于任何语言。
Go程序是通过链接构建的 一起打包。一个包依次 由一个或多个来源构成 一起声明常量的文件, 类型,变量和函数 属于包裹,属于 可在所有相同的文件中访问 包。那些元素可能是 导出并在另一个包中使用。 Packages, The Go Programming Language Specification.
你想要第一个Go套餐做什么?询问可以回答的具体问题,并提供详细信息。