
Daniil
07.12.2017
11:55:50
Всем привет, актуальна ли экосистема для го, как, например laravel&vue в php?

Andrey
07.12.2017
11:56:17
если у вас бинарь - какие у вас зависимости кроме ОС?

Александр
07.12.2017
11:57:16
на совсем голых дистрибутивах, у нас например, требуется -installsuffix cgo

Google

Pawel
07.12.2017
11:59:57
странный вопрос и ещё более странный ответ

Александр
07.12.2017
12:00:13
я сам лично не дошел, но говорят в докере на чистой OS не взлетело, из за либ

Pawel
07.12.2017
12:02:32
чем странный?
что за "экосистема laravel&vue" и при чём тут зависимости?

Александр
07.12.2017
12:03:36
они сами по себе не стартуют, им вебсервер например желательно по пыху в частности
js тянет за собой как правило npm менеджер пакетов

ainu
07.12.2017
12:06:44
Я так понял, если имелов в виду готовый каркас GO+React, то нет, таке есть (все включено, включая изоморфную, серверную генерацию страниц на JS)
Go+Vue я не видел. Но и видеть не хочу.

Александр
07.12.2017
12:09:28

Yegor
07.12.2017
12:09:44
Боже, что за идиотизм пихать бекэнд и фронтенд в одну репу
Они меняются и деплоятся независимо друг от друга

ainu
07.12.2017
12:10:56

Google

ainu
07.12.2017
12:11:16
щас=)

Yegor
07.12.2017
12:11:18
Зачем там Go?

ainu
07.12.2017
12:11:41
https://github.com/olebedev/go-starter-kit
клиент и сервер в разных директориях, их можно независимо в разных репах держать

Yegor
07.12.2017
12:13:16
Ну такое. Я бы отдельный контейнер с сервер сайд рендериногом сделал
А не пихал бы это в сервер
Чисто мое имхо

Nikita
07.12.2017
12:18:17
Привет всем. Подскажите как лучше? В сервисе был код который вынесен в отдельный пакет. В нем есть sql файлик. Раньше он в рантайме грузился по указанному пути , который указывал на директорию в в контенере. Тобишь клали бинарник и рядом файлик sql.
Сейчас это относится к пакету. Пробую в пакете в методе init вызывать этот файл. Таких пакетов несколько разных. Они используются не вместе и исключают друг друга. Как правильно подгружать sql файл из подключенного пакета?
тип файла любой, тут не важно

Andrew
07.12.2017
12:21:54

Nikita
07.12.2017
12:22:00
вопрос про директорию как и куда

Pawel
07.12.2017
12:22:14
Go+Vue я не видел. Но и видеть не хочу.
правильно, Писать что-то серьезное на нетипизированном языке — нельзя. Как следствие, все фреймворки со своими шаблонами типа vue — сразу выкидываются в помойку, без попыток в них разобраться. Отсюда и любовь всех тупорых похапэшников к vue

Nikita
07.12.2017
12:22:23

Andrew
07.12.2017
12:24:03
Так?


Nikita
07.12.2017
12:25:26
из общей логики вычленены "модели данных" и вынесены в отдельный пакет, который можно заменить теперь другим пакетом моделей, которые реализуют такой же интерфейс. У каждого пакета моделей свой sql файлик и подключение к БД.
А делаю так :
var DatabaseClient *sqlx.DB
var sqlSource *dotsql.DotSql
func init(){
var requestFileErr error
sqlSource, requestFileErr = dotsql.LoadFromFile("/app/assets/requests.sql")
if requestFileErr != nil {
logrus.Printf("Loading sql file failed: %s", requestFileErr.Error())
}
sqlx.NameMapper = func(s string) string { return s }
var mysqlErr error
DatabaseClient, mysqlErr = sqlx.Open("mysql", mysqlUser+":"+mysqlPassWord+"@tcp("+mysqlHost+")/"+mysqlDatabase+"?charset=utf8")
if mysqlErr != nil {
logrus.Printf("Connecting to database storage failed : %s", mysqlErr.Error())
}
DatabaseClient.SetConnMaxLifetime(time.Hour * 2)
DatabaseClient.SetMaxOpenConns(100)
}
сейчас указан путь в
app/assets/request.sql
потому что я вручную уже туда переложил для проверки при сборке контейнера. Да он найдет и подгружен успешно. Но хочу разобраться как его цеплять из самого пакета с моделями, или как его класть из пакета в контейнер Docker при сборке


Andrew
07.12.2017
12:28:50
Оу, докер, тут я отчаливаю ?

Nikita
07.12.2017
12:29:20

Google

Nikita
07.12.2017
12:29:38
как подгрузить файл который вызывается не в основной программе а в пакете

Alexander
07.12.2017
12:29:56

Nikita
07.12.2017
12:30:05
там как надо путь указывать или класть файл. Там же LoadFromFile берет абсолютный путь

Alexander
07.12.2017
12:30:05
при сборке

Andrew
07.12.2017
12:30:23

Andrei
07.12.2017
12:30:33
а в чем проблема передавать пакету путь до файла при инициализации приложения, например, из env и хранить файл где хочешь?
не совсем понимаю в чем смысл держать не go'шный файл внутри пакета

Nikita
07.12.2017
12:32:00

Daniel
07.12.2017
12:32:35
коллега, опишите задачу человеческим языком. зачем вам этот файл?

Andrei
07.12.2017
12:32:43
+1


Nikita
07.12.2017
12:32:56
Был сервис у которого было N количество моделей (структур данных) данные которых грузятся из БД. Появилось несколько сервисов, которым нужны были эти же модели. Модели вынесены в отдельный пакет и должны использоваться несколькими сервисами. На этом этапе, код sql запросов уже вынесен из кода Go в отдельный файлик и подгружается в рантайме. В продолжение прошлого примера кода рядом выше приведу пример использования в коде , где уже читается часть sql файла :
var modelData []AcsiRow
request, _ := sqlSource.Raw("get-AcsiModel-data")
dbErr := DatabaseClient.Select(&modelData, request, date, date, date)
лежит с пакетом моделей. Так как допускается что потребуется в целом все модели подменить другими структурами, и остальные сервисы потребители смогут корректно работать. Есть алгоритм по которому при запуске сервисов подгружался файл sql запросов, подключались клиенты бд и кешей, и все работало.
Сейчас пытаюс решить как лучше или правильнее хранить эти sql файлы, по 1 на пакет, и правильно их запускать/подгружать при запуске кода.


Andrei
07.12.2017
12:40:08
подменять планируется в рантайме или загрузка проиходит единовременно при старте приложения?

Nikita
07.12.2017
12:40:22

Andrei
07.12.2017
12:43:08
в таком случае с моей точки зрения проще всего все таки обернуть sql запросы в гошную структуру, описать интерфейс этой обертки и при инициализации пакета с моделями явно указывать, какую структуру мы хотим использовать
нужно поменять запросы - рядом делаем еще один файл со структурой с тем же интерфейсом, но с другим sql и в main подключаем уже его

Nikita
07.12.2017
12:44:23
тобишь sql запросы вынесены для отдельного таска, тесты делать)


Daniel
07.12.2017
12:45:05
Был сервис у которого было N количество моделей (структур данных) данные которых грузятся из БД. Появилось несколько сервисов, которым нужны были эти же модели. Модели вынесены в отдельный пакет и должны использоваться несколькими сервисами. На этом этапе, код sql запросов уже вынесен из кода Go в отдельный файлик и подгружается в рантайме. В продолжение прошлого примера кода рядом выше приведу пример использования в коде , где уже читается часть sql файла :
var modelData []AcsiRow
request, _ := sqlSource.Raw("get-AcsiModel-data")
dbErr := DatabaseClient.Select(&modelData, request, date, date, date)
лежит с пакетом моделей. Так как допускается что потребуется в целом все модели подменить другими структурами, и остальные сервисы потребители смогут корректно работать. Есть алгоритм по которому при запуске сервисов подгружался файл sql запросов, подключались клиенты бд и кешей, и все работало.
Сейчас пытаюс решить как лучше или правильнее хранить эти sql файлы, по 1 на пакет, и правильно их запускать/подгружать при запуске кода.
растащить sql запросы по отдельным файлам, собрать их в go код с помощью go-bindata, использовать средства go-bindata для доступа к соответствующим переменным


Nikita
07.12.2017
12:46:02

Google

Daniel
07.12.2017
12:46:28
так я не предлагаю их в go-код обратно сложить
я предлагаю go-код собирать из sql файлов с помощью go generate
ну - я так делаю

Nikita
07.12.2017
12:47:12
очень нужно для дргогог таска с этими же сервисами

Admin
ERROR: S client not available

Daniel
07.12.2017
12:48:20

Александр
07.12.2017
12:51:53
Вопрос, если я передам ссылку в функцию, потом внутри передам в эту ссылку - ссылку на значение в бд например. Оно же будет пустое на выходе?
func fill(modelField *string) {
value := db.GetAttributeValue("blabla")
if value != "" {
modelField = &value
}
}

Леша
07.12.2017
13:16:53
Здравствуйте, если кто-нибудь юзает boltdb и может дать совет по поводу правильной архитектуры, напишите, пожалуйста, в лс

Alexander
07.12.2017
13:17:24
а пишите прямо здесь, мне тоже интересно

Димка
07.12.2017
13:18:15
Подскажите плз, почему это работает не как я ожидаю))
https://play.golang.org/p/cP0HL_V6IV

Vasily Romanov
07.12.2017
13:20:20
https://s.mail.ru/LJXP/jHEkCeXWD
метод по значению
в него приходит копия структуры и результат наружу не уходит
надо сделать метод по указателю
func (t *Model) ...

Димка
07.12.2017
13:22:29

Леша
07.12.2017
13:24:43
а пишите прямо здесь, мне тоже интересно
Хорошо. Просто интересно, как правильно нужно написать логику, чтобы была возможность писать тесты. То-есть есть какие-то функции, которые сохраняют модели в бд, но во время тестов должна использоваться тестовая бд.
Я сделал так:
1. Есть глобальная переменная dbMode и две константы - normalMode и testMode. В init() dbMode = normalMode
2. Есть функция connectDB, которая смотрит на текущий dbMode и в зависимости от него возвращает бд (для тестов или для продакшена).
3. Функции для работы с моделями получают бд с помощью connectDB()
4. Во время тестов делаю dbMode = testMode и все, используется тестовая бд.
Вот мне и интересно, насколько это ужасно

Andrei
07.12.2017
13:29:25
а в чем смысл разделения базы на тестовую и прод, если она встроенная?

Google

Леша
07.12.2017
13:32:36
про прод - я преувеличил, небольшое приложение для себя, хотя какая разница
а как иначе? зачем мне в моей основной бд левые данные из тестов?
или вы про разные бакеты?

Andrei
07.12.2017
13:33:58
ну как правило для тестов используется отдельная бд, которая сетапится при инициализации и дропается по завершению тестов

Леша
07.12.2017
13:35:19
файл с тестовой бд удаляется после тестов.

Andrei
07.12.2017
13:38:13
я немного не про это, коду незачем знать тестовая у нас база или прод
можно вынести путь до файла с базой в конфигурацию и во время тестов подменять путь
исключив всю эту ненужную логику с маршрутизацией между базами

Александр
07.12.2017
13:51:26
https://play.golang.org/p/Lekvya0NRs
цените
блин какое то извращение

Леша
07.12.2017
13:53:13

Nikita
07.12.2017
13:54:22
Пока решил кейс подгрузкой нужной версии пакета через govendor в Makefile, при сборке, и копированием файла в тело контейнера.
Но с кодогенерацией предстоит разобраться в любом случае

Andrei
07.12.2017
14:20:11

Леша
07.12.2017
14:35:23

Pawel
07.12.2017
16:54:34
Как узнать название страны ПО РУССКИ по её коду ISO-3166-1 ? Я нашёл несколько подобных либ, но все они в международной и английской локали. вот например
https://github.com/pariz/gountries
есть пдф-ка https://www.ifap.ru/library/gost/7672003.pdf, но не парсить же её в конце концов ради такой фигни