2017-08-09 67 views
-3

我有一个项目,什么样的golang框架支持HTTP和cli模式?

它需要支持的API访问HTTP模式,并且还需要支持CLI模式下运行一些后台作业(如监控Redis的队列)

心中已经看了一些框架:杜松子酒,马丁尼,beego。但他们似乎并不支持它

任何人都可以给我一些建议?谢谢

+2

不要使用框架。 – Flimzy

+0

@Flimzy说的第二件事。只需编写软件,而不是寻找框架。 – Adrian

+0

谢谢,因为我需要快速完成工作,所以我选择使用框架,它可以加快我的发展。我同意,不要让框架限制自己 – Poisoner

回答

1

在去一个框架不能真正限制你。我们以马提尼框架为例。

这里从他们的GitHub页面的第一个样本:

package main 

import "github.com/go-martini/martini" 

func main() { 
    m := martini.Classic() 
    m.Get("/", func() string { 
     return "Hello world!" 
    }) 
    m.Run() 
} 

执行m.Run()之前你就可以开始你想要的任何命令行工作。所有你需要做的是在另一个goroutine中启动它:

package main 

import "github.com/go-martini/martini" 

func main() { 
    // start some function doing background stuff 
    go someCliFunc()   

    // initiate a struct and start a job in the background 
    go func(){ 
     cli := MyPackage.SomeCli{} 
     cli.Start() 
    }() 

    m := martini.Classic() 
    m.Get("/", func() string { 
     return "Hello world!" 
    }) 
    m.Run() 
} 

实际上做背景的东西函数可以有这样的结构:

func someCliFunc() { 
    // do some initial stuff 

    defer func() { 
     // do some stuff on exit 
    }() 

    // start the loop 
    for { 
     // do stuff regularly 

     // make sure the loop does not use the entire cpu 
     time.Sleep(5*time.Second) 
    } 
} 
+0

谢谢,这种方式可以解决我的问题。实际上这是我现在用框架做的事情。它工作正常。 – Poisoner

+0

我不好,我忘了标记它。 :) – Poisoner