Go-фреймворк — WeiGo [weigo]
|project #проектный каталог
|----app #каталог приложения
|----config #каталог конфигурации
|----route #каталог маршрута
|----weigo #каталог фреймворка
|----go.mod #файл проекта go.mod
|----main.go #стартовый файл проекта
MVC-режим, M — модель (слой данных), V — представление (слой страницы), C — контроллер (запрос и ответ).
Вся конфигурация находится в одном файле JSON, формат JSON;
App: это конфигурация проекта;
Log: конфигурация журнала;
DB: конфигурация базы данных.
{
"App": {
"Debug": true
},
"Log": {
"SqlInfo": "console"
},
"DB": {
"Type": "mysql",
"Hostname": "127.0.0.1",
"Port": "3306",
"Database": "weigo",
"Charset": "utf8mb4",
"Username": "root",
"Password": "root",
"Prefix": "wei_"
}
}
В route.go в каталоге route зарегистрируйте маршрут:
weigo.Router("/", &controller.IndexController{})
weigo.Router("/user/", &controller.UserController{})
Первый параметр:
Путь доступа,
user — это имя контроллера, соответствующее файлу app/controller/UserController.go и структуре UserController внутри него;
Эта структура будет иметь множество методов, и имена методов не нужно определять в маршруте, они будут автоматически сопоставляться: например, 127.0.0.1:9099/user/userinfo будет обращаться к методу UserInfo структуры UserController. Все маршруты строчные.
Второй параметр:
Тип переменной контроллера.
Контроллеру необходимо наследовать от контроллера фреймворка:
type UserController struct {
weigo.Controller
}
Внутри метода структуры контроллера, то есть внутри метода структуры:
c.Display("")
Если параметр пуст, используйте файл app/view/имя_контроллера/имя_метода.html, иначе используйте указанный шаблон.
Присвойте значение переменной:
c.Assign("name","唯一")
C — текущий контроллер.
Используйте шаблон HTML:
<p>{{.name}}</p>
Модель пользователя:
Путь: app/model/user.go
Правила кода:
Одна модель соответствует одной таблице данных, принадлежит одному модулю;
Одна модель может иметь только одну структуру, которая является структурой этой модели, с тем же именем;
Методы, определённые в структуре модели, являются методами этой структуры, без других функций;
Если метод модели должен получить данные из базы данных, используйте db для получения:
rows, errorStr := weigo.DataBase.Table("cto_controller").SetFields("name,id").GetAll()
rows, errorStr := weigo.DataBase.Table("cto_controller").SetFields("name,id").GetAll()
Перед цепными операциями сначала получите соединение с базой данных:
weigo.DataBase
Цепные операции: сначала укажите таблицу данных, два способа:
weigo.DataBase.Table("wei_user")
weigo.DataBase.Name("user")
Table: вручную введите полное имя таблицы;
Name: без префикса, используйте префикс, указанный в конфигурации.
SetFields: установите поля для запроса;
Where: условия запроса; можно передать строку или карту;
Where("name="weigo" and status=1")
Where(["name"=>"[:string]weigo","status"=>1]); //[:string] представляет строку, будет заключена в кавычки
Where(["name[like]"=>"weigo","status"=>1]);//[like] представляет собой запрос с подстановочными знаками
Group("age,status"): группировка, передача строки;
Having: передача строки;
Order("uid desc,name asc"): сортировка, передача строки;
Limit(10): GetAll эффективен, GetOne неэффективен;
Page(2,10): пейджинг, первый параметр — страница, второй параметр — размер страницы;
GetOne: получить одну запись данных;
GetAll: получить несколько записей данных;
Цепная операция: Table или Name указывает на таблицу, GetOne или GetAll получает данные, другие не зависят от порядка.
weigo.DataBase.Table("cto_controller").SetFields("name,id").Where().Group().Order().GetAll()
package controller
import (
"encoding/json"
"fmt"
"io"
"regexp"
"strings"
"wycto/weigo"
)
type APIController struct {
weigo.Controller
}
/**
Запрос
*/
func (c *APIController) Index() {
var ww map[string]interface{}
ww = make(map[string]interface{})
rows, errorStr := weigo.DataBase.Name("user").SetFields("email,`name`,`nickname`").Where(ww).GetAll()
if errorStr != "" {
fmt.Println(errorStr)
}
json, _ := json.Marshal(rows)
io.WriteString(c.Context.ResponseWriter, string(json))
}
/**
Удалить все
*/
func (c *APIController) DeleteAll() {
var ww map[string]interface{}
ww = make(map[string]interface{})
ww["uid|<"] = 5
ww["nickname"] = "唯一"
rows, errorStr := weigo.DataBase.Name("user").DeleteAll()
if errorStr != "" {
fmt.Println(errorStr)
}
json, _ := json.Marshal(rows)
io.WriteString(c.Context.ResponseWriter, string(json))
}
/**
Удаление
*/
func (c *APIController) Delete() {
var ww map[string]interface{}
ww = make(map[string]interface{})
ww["nickname"] = "update后的唯一"
rows, errorStr := weigo.DataBase.Name("user").Where(ww).Delete()
if errorStr != "" {
fmt.Println(errorStr)
}
json, _ := json.Marshal(rows)
io.WriteString(c.Context.ResponseWriter, string(json))
}
/**
Обновление
*/
func (c *APIController) Update() {
var ww map[string]interface{}
ww = make(map[string]interface{})
ww["nickname"] = "唯一"
var dd map[string]interface{}
dd = make(map[string]interface{})
dd["nickname"] = "update后的唯一"
rows, errorStr := weigo.DataBase.Name("user").Where(ww).Update(dd)
if errorStr != "" {
fmt.Println(errorStr)
}
json, _ := json.Marshal(rows)
io.WriteString(c.Context.ResponseWriter, string(json))
}
``` ```
fmt.Println(errorStr)
}
json, _ := json.Marshal(rows)
io.WriteString(c.Context.ResponseWriter, string(json))
}
/**
Добавить
*/
func (c *APIController) Add() {
var ww map[string]interface{}
ww = make(map[string]interface{})
ww["uid"] = 3
var dd map[string]interface{}
dd = make(map[string]interface{})
dd["nickname"] = "Уникальный"
rows, errorStr := weigo.DataBase.Name("user").Insert(dd)
if errorStr != "" {
fmt.Println(errorStr)
}
json, _ := json.Marshal(rows)
io.WriteString(c.Context.ResponseWriter, string(json))
}
/**
Обновить все
*/
func (c *APIController) UpdateAll() {
var ww map[string]interface{}
ww = make(map[string]interface{})
ww["uid"] = 3
var dd map[string]interface{}
dd = make(map[string]interface{})
dd["nickname"] = "Единственный333"
rows, errorStr := weigo.DataBase.Name("user").Where(ww).UpdateAll(dd)
if errorStr != "" {
fmt.Println(errorStr)
}
json, _ := json.Marshal(rows)
io.WriteString(c.Context.ResponseWriter, string(json))
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )