Letgo Web Framework
Letgo — это открытый высокопроизводительный веб-фреймворк для языка программирования Go.
Мой адрес электронной почты: 474790700@qq.com.
Содержание
Установка
Чтобы установить пакет letgo, вам необходимо сначала установить Go и настроить рабочее пространство Go.
$ go get -u github.com/wjpxxx/letgo
import "github.com/wjpxxx/letgo"
Быстрый старт
Web
package main
import (
"github.com/wjpxxx/letgo/web"
"github.com/wjpxxx/letgo/web/context"
"github.com/wjpxxx/letgo/web/filter"
"fmt"
)
func main() {
web.AddFilter("/user/*",filter.BEFORE_ROUTER,func(ctx *context.Context){
ctx.Output.JSON(200,lib.InRow{
"www":"fff",
})
})
web.LoadHTMLGlob("templates/*")
web.Get("/", func(ctx *context.Context){
//ctx.Output.Redirect(301,"http://www.baidu.com")
x:=ctx.Input.Param("a")
if x!=nil{
ctx.Session.Set("a",x.Int())
var a int
ctx.Session.Get("a",&a)
fmt.Println("a:",a,"x:",x.Int())
}
ctx.Output.HTML(200,"index.tmpl",lib.InRow{
"title":"wjp",
})
})
web.Post("/user/:id([0-9]+)", func(ctx *context.Context){
type A struct{
Data string `json:"data"`
ShopID int64 `json:"shop_id"`
}
a:=A{}
ctx.SetCookie("a", "234234")
ctx.Input.BindJSON(&a)
fmt.Println(a)
ctx.Output.YAML(500,lib.InRow{
"message":"123123",
"b":2,
})
})
web.Get("/user/:id([0-9]+)/:id3([0-9]+)", func(ctx *context.Context){
ctx.Output.XML(200,lib.InRow{
"message":"123123",
"b":2,
})
})
web.Run()//listen and serve on 0.0.0.0:1122 (for windows "localhost:1122")
}
Обслуживание статических файлов
func main() {
web.Static("/assets/", "./assets")
web.StaticFile("/1.png", "./assets/b3.jpg")
web.Run()
}
Регистрация контроллера
type UserController struct{}
func (c *UserController)Add(ctx *context.Context){
ctx.Output.Redirect(302,"/")
}
func main() {
c:=&UserController{}
web.RegisterController(c)
c2:=&UserController{}
web.RegisterController(c2,"get:add")
web.Run()
}
Включение алгоритма ограничения текущего трафика
package main
import (
"github.com/wjpxxx/letgo/web"
"github.com/wjpxxx/letgo/web/context"
"github.com/wjpxxx/letgo/web/filter"
"github.com/wjpxxx/letgo/web/limiting"
"fmt"
)
func main() {
EnableLimiting(limiting.LIMIT_FLOW_TOKEN_BUCKET, 0.02)
web.AddFilter("/user/*",filter.BEFORE_ROUTER,func(ctx *context.Context){
ctx.Output.JSON(200,lib.InRow{
"www":"fff",
})
})
web.LoadHTMLGlob("templates/*")
web.Get("/", func(ctx *context.Context){
//ctx.Output.Redirect(301,"http://www.baidu.com")
x:=ctx.Input.Param("a")
if x!=nil{
ctx.Session.Set("a",x.Int())
var a int
ctx.Session.Get("a",&a)
fmt.Println("a:",a,"x:",x.Int())
}
ctx.Output.HTML(200,"index.tmpl",lib.InRow{
"title":"wjp",
})
})
web.Post("/user/:id([0-9]+)", func(ctx *context.Context){
type A struct{
Data string `json:"data"`
ShopID int64 `json:"shop_id"`
}
a:=A{}
ctx.SetCookie("a", "234234")
ctx.Input.BindJSON(&a)
fmt.Println(a)
ctx.Output.YAML(500,lib.InRow{
"message":"123123",
"b":2,
})
})
web.Get("/user/:id([0-9]+)/:id3([0-9]+)", func(ctx *context.Context){
ctx.Output.XML(200,lib.InRow{
"message":"123123",
"b":2,
})
})
web.Run()//listen and
``` **Перевод текста на русский язык:**
## RPC
```go
import "github.com/wjpxxx/letgo/net/rpc"
func main(){
s:=rpc.NewServer()
//s.RegisterName("Hello",new(Hello))
s.Register(new(Hello))
go func(){
for{
time.Sleep(10*time.Second)
var reply string
//rpc.NewClient().WithAddress("127.0.0.1","8080").Call("Hello.Say","nihao",&reply).Close()
rpc.NewClient().Start().Call("Hello.Say","nihao",&reply).Close()
fmt.Println(reply)
rm:=rpc.RpcMessage{
Method: "Hello.Say",
Args: "rpc message",
Callback: func(a interface{}){
fmt.Println(a.(string))
},
}
rpc.NewClient().Start().CallByMessage(rm).Close()
}
}()
s.Run()
}
import "github.com/wjpxxx/letgo/command/command"
func main(){
cmd:=command.New().Cd("D:\\Development\\go\\web\\src").SetCMD("dir")
//cmd.AddPipe(New().SetCMD("find","'\\c'","'80'"))
cmd.Run()
}
{"ip":"127.0.0.1","port":"5566"}
Запуск сервера:
./main server
{
"paths":[
{
"locationPath":"D:/Development/go/web/src/sync-v2", //Локальный каталог для синхронизации
"remotePath":"/root/new/buyer2", //Каталог, хранящийся на сервере
"filter":[ //Отфильтровать файлы, которые не синхронизированы с сервером
"main.go",
"runtime/cache/sync/*"
]
}
],
"server":{
"ip":"127.0.0.1", //IP-адрес сервера
"port":"5566",
"slave":[
{
"ip":"127.0.0.2", //Для других серверов рекомендуется находиться в той же локальной сети, что и сервер
"port":"5566"
}
]
}
}
Запуск файла:
./main file
Клиент отправляет файл для синхронизации на сервер, после чего сервер синхронизирует файл с ведомым устройством. 3. Запуск команды:
./main cmd
Клиент посылает команду консоли на сервер и одновременно отправляет её ведомому устройству, а интерфейс параллельного выполнения возвращает результат. 4. Код на языке Go:
package main
import (
"github.com/wjpxxx/letgo/plugin"
"github.com/wjpxxx/letgo/plugin/sync/syncconfig"
"fmt"
"os"
)
func main() {
args:=os.Args
if len(args)>1{
if args[1]=="server"{
plugin.Plugin("sync-server").Run()
} else if args[1]=="file"{
plugin.Plugin("sync-file").Run()
} else if args[1]=="cmd"{
rs:=plugin.Plugin("sync-cmd").Run("/www/","ls -al")
result:=rs.(map[string]syncconfig.CmdResult)
fmt.Println(result)
}
}
Создание резидентных приложений в памяти. Когда вызывается метод stop, все задачи будут ожидать выполнения и завершаться.
package main
import (
"github.com/wjpxxx/letgo/cron/task"
"time"
"fmt"
)
func main() {
task.RegisterTask("add",1,func(ctx *Context){
fmt.Println(ctx.Name,ctx.TaskNo)
//fmt.Println()
//time.Sleep(1*time.Second)
})
go func(){
time.Sleep(15*time.Second)
task.Stop()
}()
``` ## Crontab
Создание Crontab.
```go
package main
import (
"github.com/wjpxxx/letgo/cron/context"
"github.com/wjpxxx/letgo/lib"
"fmt"
"time"
)
func main() {
AddCron("cron1","*/6 * * * * *",func(ctx *context.Context){
fmt.Println("cron1", lib.Now())
})
AddCron("cron2","*/3 * * * * *",func(ctx *context.Context){
fmt.Println("cron2", lib.Now())
})
go func(){
time.Sleep(10*time.Second)
Stop()
}()
StartAndWait()
}
package main
import (
"github.com/wjpxxx/letgo/db/mysql"
)
func main() {
//Автоматическая генерация model и entity исходного кода для всех таблиц данных
mysql.GenModelAndEntity("имя модуля",
SlaveDB{
Name:"имя",
DatabaseName:"имя",
UserName:"пользователь",
Password:"пароль",
Host:"127.0.0.1",
Port:"3306",
Charset:"utf8mb4",
Prefix: "cd",
},false)
//Автоматически генерировать исходный код модели и сущности для одной таблицы
mysql.GenModelAndEntityByTableName("имя модуля","имя таблицы",
SlaveDB{
Name:"имя",
DatabaseName:"имя",
UserName:"пользователь",
Password:"пароль",
Host:"127.0.0.1",
Port:"3306",
Charset:"utf8mb4",
Prefix: "cd",
},false)
}
После выполнения исходный код модели будет сгенерирован в текущем каталоге model /, а исходный код сущности — в каталоге model / entity.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )