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

OSCHINA-MIRROR/chunanyong-readygo

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

Введение

Golang разработка каркаса.

Архитектура ПО

На основе Gin, Zorm и Gowe.

Есть встроенный генератор кода.

  • Написан на основе собственных SQL-запросов, является оптимизированной версией Springrain.
  • Код упрощён, всего около 2000 строк, подробные комментарии облегчают настройку и модификацию.
  • Поддерживается распространение транзакций, что стало основной причиной появления Zorm.
  • Поддержка MySQL, PostgreSQL, Oracle, MSSQL, SQLite.
  • Разделение чтения и записи в базе данных.

Для использования в производстве см. UserStructService.go.

Пример

  1. Создание сущностных классов или ручное написание кода, рекомендуется использовать генератор кода (https://gitee.com/chunanyong/readygo/tree/master/codegenerator).
//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"
}
  1. Инициализация Zorm
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)
  1. Вставка
var user permstruct.UserStruct
err := zorm.Insert(context.Background(), &user)
  1. Удаление
err := zorm.Delete(context.Background(),&user)
  1. Обновление
err := zorm.Update(context.Background(),&user)
//finder обновление
err := zorm.UpdateFinder(context.Background(),finder)
  1. Запрос
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)
  1. Распространение транзакций
//Анонимная функция 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
	//Конец бизнес-кода транзакции
})
  1. Пример использования в производстве
//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
}
  1. Тестирование
//Функция тестирования
go test -run TestAdd2
//Тестирование производительности
go test -bench=.
go test -v -bench=. -cpu=8 -benchtime="3s" -timeout="5s" -benchmem

Комментарии ( 0 )

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

Введение

Гоу девелопмент джакст рук. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

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

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