Слияние кода завершено, страница обновится автоматически
Введение
Golang разработка каркаса.
Архитектура ПО
На основе Gin, Zorm и Gowe.
Есть встроенный генератор кода.
Для использования в производстве см. UserStructService.go.
Пример
//UserOrgStructTableName — константа имени таблицы, удобно для прямого вызова
const UserOrgStructTableName = "t_user_org"
// UserOrgStruct — пользовательская таблица в организации
type UserOrgStruct struct {
//Включает стандартный метод EntityStruct, изолирующий изменения
zorm.EntityStruct
//Id — номер
Id string `column:"id"`
//UserId — номер пользователя
UserId string `column:"userId"`
//OrgId — номер организации
OrgId string `column:"orgId"`
//ManagerType — 0: член, 1: сотрудник, 2: руководитель
ManagerType int `column:"managerType"`
//------------------Конец полей базы данных, пользовательские поля ниже---------------//
}
//GetTableName получает имя таблицы
func (entity *UserOrgStruct) GetTableName() string {
return UserOrgStructTableName
}
//GetPKColumnName получает имя первичного ключа таблицы базы данных. Поскольку необходимо поддерживать Map, это должно быть только имя поля базы данных.
func (entity *UserOrgStruct) GetPKColumnName() string {
return "id"
}
import _ "github.com/go-sql-driver/mysql"
dataSourceConfig := zorm.DataSourceConfig{
DSN: "root:root@tcp(127.0.0.1:3306)/readygo?charset=utf8&parseTime=true",
DriverName: "mysql",
DBType: "mysql",
}
zorm.NewDBDao(&dataSourceConfig)
var user permstruct.UserStruct
err := zorm.Insert(context.Background(), &user)
err := zorm.Delete(context.Background(),&user)
err := zorm.Update(context.Background(),&user)
//finder обновление
err := zorm.UpdateFinder(context.Background(),finder)
finder := zorm.NewSelectFinder(permstruct.UserStructTableName)
finder.Append(" order by id asc ")
page := zorm.NewPage()
var users = make([]permstruct.UserStruct, 0)
err := zorm.Query(context.Background(), finder, &users, page)
//Анонимная функция return error, если не nil, транзакция откатывается
_, errSaveUserStruct := zorm.Transaction(ctx, func(ctx context.Context) (interface{}, error) {
//Начало бизнес-кода транзакции
errSaveUserStruct := zorm.Insert(ctx, userStruct)
if errSaveUserStruct != nil {
return nil, errSaveUserStruct
}
return nil, nil
//Конец бизнес-кода транзакции
})
//FindUserOrgByUserId — поиск объекта UserOrg в промежуточной таблице по userId
func FindUserOrgByUserId(ctx context.Context, userId string, page *zorm.Page) ([]permstruct.UserOrgStruct, error) {
if len(userId) < 1 {
return nil, errors.New("userId не может быть пустым")
}
finder := zorm.NewFinder().Append("SELECT re.* FROM ").Append(permstruct.UserOrgStructTableName).Append(" re ")
finder.Append(" WHERE re.userId=? order by re.managerType desc ", userId)
userOrgs := make([]permstruct.UserOrgStruct, 0)
errQueryList := zorm.Query(ctx, finder, &userOrgs, page)
if errQueryList != nil {
return nil, errQueryList
}
вернуть userOrgs, nil
}
//Функция тестирования
go test -run TestAdd2
//Тестирование производительности
go test -bench=.
go test -v -bench=. -cpu=8 -benchtime="3s" -timeout="5s" -benchmem
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )