我已经编写了用于会计系统访问的界面。我想从我的程序中隐藏接口的特定实现,因为我将永远只有一个“活动的”记帐系统。因此,我计划将接口的方法设置为不导出(隐藏),然后导出基本包中固有的导出函数,这些函数从本地适配器调用相同的函数。
package accounting
import "errors"
type IAdapter interface {
getInvoice() error
}
var adapter IAdapter
func SetAdapter(a IAdapter) {
adapter = a
}
func GetInvoice() error {
if (adapter == nil) {
return errors.New("No adapter set!")
}
return adapter.getInvoice()
}
__________________________________________________
package accountingsystem
type Adapter struct {}
func (a Adapter) getInvoice() error {return nil}
__________________________________________________
package main
import (
"accounting"
"accountingsystem"
)
function main() {
adapter := accountingsystem.Adapter{}
accounting.SetAdapter(adapter)
}
问题在于,由于无法看到getInvoice()
by 的实现,编译器会抱怨accountingsystem.Adapter
:
./main.go:2: cannot use adapter (type accountingsystem.Adapter) as type accounting.IAdapter in argument to accounting.SetAdapter:
accountingsystem.Adapter does not implement accounting.IAdapter (missing accounting.getInvoice method)
have accountingsystem.getInvoice() error
want accounting.getInvoice() error
有什么方法可以用另一个包中的未导出方法实现接口?还是我以一种非惯常的方式思考这个问题?
您可以使用匿名结构字段使用未导出的方法来实现接口,但是不能提供自己的未导出方法的实现。例如,此版本的适配器满足Accounting.IAdapter接口。
type Adapter struct {
accounting.IAdapter
}
我无法使用Adapter来提供我自己的IAdapter.getInvoice()方法的实现。
这个技巧不会帮助您。
如果您不希望其他软件包直接使用accountingsystem.Adapter,则将其类型设置为unexported,并添加一个用于将适配器注册到计费软件包的功能。
package accounting
type IAdapter interface {
GetInvoice() error
}
---
package accountingsystem
type adapter struct {}
func (a adapter) GetInvoice() error {return nil}
func SetupAdapter() {
accounting.SetAdapter(adapter{})
}
---
package main
func main() {
accountingsystem.SetupAdapter()
}
问题内容: 是否可以在另一个CSS文件中包含一个CSS文件? 问题答案: 是: 注意: 该规则必须先于所有其他规则(除外)。 其他语句需要其他服务器请求。或者,将所有CSS连接到一个文件中,以避免多个HTTP请求。例如,复制的内容和入和仅供参考。
很抱歉我问了一个相当愚蠢的问题。例如,一个表可以有由“user_id”和“employee_id”组成的复合主键吗 和另一个包含“user_id”作为主键的表?
问题内容: 例如,如果我具有以下HTML: 和这个CSS: 就像在脚本语言中一样,您具有通常在脚本顶部编写的通用函数,而每次需要使用该函数时,只需调用该函数即可,而不必每次都重复所有代码。 问题答案: 不,您不能从另一个引用一个规则集。 但是,您可以在样式表中的多个规则集上重用选择器, _并_在单个规则集上使用多个选择器通过用逗号分隔它们。 您还可以将多个类应用于单个HTML元素(class属性采
我希望避免文件中杂乱的东西,而在我看来,放在单独的文件中会更好。 应该类似于 这有可能吗?如果不是,什么是避免杂乱的明智方法呢?
在我的C#/XAML metro应用程序中,有一个启动长时间运行过程的按钮。因此,按照建议,我使用Async/await来确保UI线程不会被阻塞: 偶尔,GetResults中发生的事情需要额外的用户输入才能继续。为了简单起见,假设用户只需单击“Continue”按钮。 我的问题是:如何挂起GetResults的执行,让它等待一个事件,比如单击另一个按钮? 这里有一个丑陋的方法来实现我所寻找的:C
问题内容: 所以,如果我有一个数组: 还有另一个数组 我希望有一些ng-repeat可以仅通过出现在$ filterBy中的项来过滤$ scope.letters。 我希望能够做到以下几点: 并打印b,c 我知道这是一个非常愚蠢的示例,但是有没有一种方法可以根据另一个数组对象的内容来过滤angular.js表达式? 问题答案: 您应该尝试这样的事情: JS: HTML: 您可以尝试现场示例。