Golang的自调用功能

时间:2018-12-01 21:23:30

标签: go

无法轻松找到有关如何在Golang中创建自调用功能的信息。

我的最终目标是从文件中导出地图,如下所示:

type Foo struct {}
type Bar struct {}

var TypeMap map[interface{}]string;

func selfInvoking(){

  TypeMap = map[interface{}]string{
    Foo: "foo",
    Bar: "bar"
   }
}()

如何从Go中的文件中导出像这样的填充地图?基本上是一次性配置。

使用上面的模式,我会得到

  

“未使用的变量TypeMap”。

2 个答案:

答案 0 :(得分:4)

有3种方法可以执行GO中的初始化代码:

您可以使用最后两个。

变量:

var TypeMap = map[interface{}]string{
    Foo{}: "foo",
    Bar{}: "bar",
   }

init函数:

var TypeMap map[interface{}]string

func init(){
  TypeMap = map[interface{}]string{
    Foo: "foo",
    Bar: "bar",
   }
}

在任何情况下,请务必注意初始化程序,不要将其用于任何复杂的代码或io代码。 初始化程序对于单元测试和错误处理/记录不是很好。

答案 1 :(得分:1)

不确定您要达到的目标,但这至少可以编译

app.get('/recipe', (req, res) => {
if (req.query.ingredients) {
    let ingredientMap = req.query.ingredients.map(x =>
    Recipe.find({ingredients: {$regex: new RegExp(JSON.parse(x).name)}}));

    return Promise.all(ingredientMap).then((results) => {
        if (!results) {
        res.status(404).send();
    }
    let filteredResults = results.filter(x => {
        return typeof x !== 'undefined' ? x[0] : null
    });

    let merged = [].concat.apply([], filteredResults);

    res.status(200).send(merged);
    }).catch( e => {
        res.status(400).send();
    })
}

});