2017-08-09 3 views
-3

J'ai un projet,Quel type de framework golang supporte les modes HTTP et CLI?

Il faut soutenir le mode http pour l'accès api, et doivent également supporter le mode cli pour exécuter une tâche de fond (comme la surveillance de file d'attente Redis)

I'v a regardé un certain cadre : Gin, Martini, beego. Mais ils ne semblent pas le soutenir

quelqu'un peut me donner un conseil? Merci

+2

Ne pas utiliser un cadre. – Flimzy

+0

Deuxièmement ce que @Flimzy a dit. Il suffit d'écrire un logiciel au lieu de chercher des cadres. – Adrian

+0

merci, parce que j'ai besoin de terminer un travail rapidement, donc je choisis d'utiliser un cadre, il peut accélérer mon développement. Je suis d'accord avec cela ne laissez pas le cadre vous limiter – Poisoner

Répondre

1

En aller un cadre ne peut pas vraiment vous limiter. Prenons l'exemple de l'armature de martini.

Voici le premier échantillon de leur page GitHub:

package main 

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

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

Avant d'exécuter m.Run() vous pouvez commencer tout travail cli vous voulez. Tout ce que vous avez à faire est de commencer dans une autre 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() 
} 

La fonction en train de faire les choses de fond pourrait avoir une structure comme celle-ci:

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

merci, de cette façon peut résoudre ma question. En fait, c'est ce que je fais avec le cadre maintenant. Ça fonctionne bien. – Poisoner

+0

mon mauvais, j'ai oublié de le marquer. :) – Poisoner