整个泛型的东西有点像扔我一个循环,更多的RTT.
Specificis?啊,这里的要点是:
enum QueryHelper {
query1,
query2;
static <T> QueryHelper getQueryHelper (Class<T> expectedReturn) {
if (expectedReturn.isInstance (SomeRelatedClass.class))
return query1;
else
return query2;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我会这样称呼它:
...
QueryHelper helper = QueryHelper.getQueryHelper(SomeRelatedClass.class);
...
Run Code Online (Sandbox Code Playgroud)
这样我就可以在实际帮助器中灵活地分配查询返回类型.它做了一些铸造和对象创建.我所看到的是,没有比赛,我应该以其他方式这样做吗?或者整个想法是不是很糟糕?
而真正的核心是我不理解class.isInstance和instanceOf运算符之间的区别?我应该使用后者吗?
我正在尝试重构一些测试代码,并且在两个包中我需要做同样的事情(连接到数据库)。我正在进入一个导入周期。我明白为什么我不能这样做,但我想知道最好的解决办法是什么。
具体来说,我有三个包:testutils、client、engine。
在引擎中,我定义了一个接口和实现(均导出)。
package engine
type interface QueryEngine {
// ...
}
type struct MagicEngine {
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后在testutils包中我将创建一个MagicEngine并尝试返回它。
package testutils
func CreateAndConnect() (*engine.MagicEngine, error) {
// ....
}
Run Code Online (Sandbox Code Playgroud)
现在在测试代码中(使用TestMain)我需要做类似的事情
package engine
func TestMain(m *testing.M) {
e, err := testutils.CreateAndConnect()
// ....
os.Exit(m.Run())
}
Run Code Online (Sandbox Code Playgroud)
这当然是一个循环。我想这样做,以便我可以在client包中也使用这个testutils.CreateAndConnect()方法。我不想重复两个包中的代码。我不希望它出现在engine包的主代码中,它对于测试来说非常具体。
engine我尝试将其添加为测试类 ( )上的导出方法engine/engine_test.go,并在client/client_test.go. 没有骰子。:/
我觉得我已经用其他语言做到了这一点,但可能很疯狂。构建此代码以实现可重用性的最佳方法是什么?
当我的对象被描述时,我试图找出关闭服务连接的最佳方法.
我有这样的事情:
class something {
public final LongConnection lc;
public something () {
lc = new LongConnection ();
lc.initConnection ();
new Thread (new Runnable () {
public void run () {
ReferenceQueue<LongConnection> rq = new ReferenceQueue<LongConnection> ();
WeakReference<LongConnection> wr = new WeakReference<LongConnection> (lc, rq);
// now it should start listening for the object to be added to the queue
while (true) {
Reference<? extends LongConnection> ref = rq.remove ();
if (rq != null) {
rq.get ().shutdown ();
break;
}
} …Run Code Online (Sandbox Code Playgroud) 我想更好地理解如何在Go中使用受保护的空间.我来自java,这意味着我可以通过受保护的继承访问值,因为这里只有组合我想确保我在正确的路径上.
问题:我想在子实现中设置一个值,但不在通用接口上公开一个setter.
当真正没有层次结构时,为"子类"提供setter的最佳方法是什么?
这意味着我想:
type Bottom interface {
GetYouSome()
// rote things
SetSpeed(int)
DeliveryMechanism() chan string
}
Run Code Online (Sandbox Code Playgroud)
请注意,没有SetDeliveryMechanism(chan string)方法.
我想我会从一个实现死记硬背的基础开始,这意味着实际的实现将提供'GetYouSome'方法.我也希望这些存在于不同的包中.将有几十个实现,我希望将命名空间用沙箱(即它们都可以使用const DefaultPort).
为了说明问题,我做了一个小项目.它的布局如下:
.
??? src
??? main.go
??? parent
??? child
? ??? child.go
??? parent.go
Run Code Online (Sandbox Code Playgroud)
child.go我们在哪里实际创建了几种类型Bottom,但parent.go实际上我们定义了样板代码(setters/getters).问题是我不能在任何地方实例化频道!
理想情况下,实现看起来像这样:
//------------- parent.go -------------
package parent
type Bottom interface {
GetYouSome()
// rote things
SetSpeed(int)
DeliveryMechanism() chan string
}
// Intended to implement the boring things
type GenericBottom struct {
speed int
deliveryChan chan string …Run Code Online (Sandbox Code Playgroud) 我试图让我真的回到这样的事情:
{"map": {}}不是,{"map":null}但编码/ json似乎检测到这是一个空地图,只返回后一个值.
type test struct {
MyMap map[string]string `json:"map"`
}
func main() {
testval := test{}
asjson, err := json.Marshal(testval)
fmt.Println(testval)
fmt.Println(string(asjson))
}
Run Code Online (Sandbox Code Playgroud)
输出是这样的
{map[]}
{"map":null}
Run Code Online (Sandbox Code Playgroud)
我希望得到它的{"map":{}}建议?我试图手动初始化地图,并使用它的参考.似乎都没有产生我想要的输出.:/
我有一种情况,我们有3层盒子,在每一层我们应用不同的变量设置(如缓存目录所在的位置),但有一堆默认值.我还需要在每个节点上覆盖,这通常通过主机本身的库存变量来完成.我不确定组织主机的最佳方法是什么,以便优先顺序对我有利.
以下是我尝试过的不同内容.在每种情况下,我在库存文件中都有这样的条目:
[bots-fancy]
fancy-1
[bots-super-fancy]
super-1
[bots-magical]
magic-1
magic-2 provider=aws
Run Code Online (Sandbox Code Playgroud)
起初,我让每个人都有一长串变量定义.我也有不同的group_var/bots/[bots-magical | bots-super-fancy | bots-fancy].yaml文件.这很快变得难以为继.
尝试1:使用playbook变量在剧本中我有这样的事情:
---
hosts:
- bots
vars_files:
- "group_vars/bots/defaults.yml"
- "group_vars/bots/{{ groups_names[0] }}.yml"
roles:
- somethign
Run Code Online (Sandbox Code Playgroud)
这工作(虽然是脆弱的)但它不会让我覆盖每个主机.我不得不偶尔在节点上设置不同的东西,但不是整个组.
尝试2:group_vars每个人使用
我补充道
[bots:children]
bots-fancy
bots-super-fancy
bots-magical
Run Code Online (Sandbox Code Playgroud)
到hosts文件.vars_files从剧本中删除任何内容并group_vars为每个组创建.我添加了默认/共享设置group_vars/bots.yaml.当我运行playbook时,它只会加载bots它看起来的group_vars.理想情况下,我希望它加载bots,然后用它覆盖它bots-fancy.然后最后来自hosts文件的值.
我不确定构建这些组的最佳方法,所以任何输入都会非常有用!