1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/WJPone-letgo

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Letgo Web Framework

Letgo — это открытый высокопроизводительный веб-фреймворк для языка программирования Go.

Мой адрес электронной почты: 474790700@qq.com.

Содержание

  1. Letgo Web Framework
    • Установка
    • Быстрый старт

Установка

Чтобы установить пакет letgo, вам необходимо сначала установить Go и настроить рабочее пространство Go.

  1. Сначала установите Go (версия 1.12+ обязательна), затем вы можете использовать следующую команду Go для установки letgo.
$ go get -u github.com/wjpxxx/letgo
  1. Импортируйте его в свой код:
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()
}

Command

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()
}

Синхронизация файлов

  1. Конфигурация сервера в config/sync_server.config:
{"ip":"127.0.0.1","port":"5566"}

Запуск сервера:

./main server
  1. Конфигурация клиента в config/sync_client.config:
{
    "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 )

Вы можете оставить комментарий после Вход в систему

Введение

Летго — это высокопроизводительный легковесный веб-фреймворк с открытым исходным кодом для языка программирования Go. Веб-фреймворк Golang. Развернуть Свернуть
MIT
Отмена

Обновления (3)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/WJPone-letgo.git
git@api.gitlife.ru:oschina-mirror/WJPone-letgo.git
oschina-mirror
WJPone-letgo
WJPone-letgo
master