@proGO

Страница 1173 из 1674
Anton
22.01.2018
18:11:44
А почему с ноды переписывать хотите?
Писали давно с коллегой, ещё мало что понимали в этом деле, понаписали велосипедов, а сейчас нужно впиливать новый функционал, который в текущую кодовую базу вписывать очень больно. В любом случае нужно переписать с нуля, вот решили на Go

Demuz
22.01.2018
18:14:30
Ооо, здорово.

Anton
22.01.2018
18:16:10
Так мб подскажете какие-нибудь репо проектов небольшой-средней величины, в основном, конечно, CRUD операции с валидацией пользовательских данных

Demuz
22.01.2018
18:19:50
Лично я такие не встречал. Пишу сам просто и все.

Google
Yury
22.01.2018
18:57:36
Так мб подскажете какие-нибудь репо проектов небольшой-средней величины, в основном, конечно, CRUD операции с валидацией пользовательских данных
А чем вы думаете должно принципиально отличаться? Все таки ООП и там и там. Да и нода с го во многом похожи.

nezorflame
22.01.2018
18:58:27
скинул бы пример на 5к строк, да реп приватный

в общем, можно, но не всегда нужно

Yury
22.01.2018
18:59:09
Скорее почитайте как вообще архитектуру строить большую. Или возьмите фреймворк на го, который уже навязвает подход.

Anton
22.01.2018
18:59:43
А чем вы думаете должно принципиально отличаться? Все таки ООП и там и там. Да и нода с го во многом похожи.
ну для меня пока хотя бы организацией проекта с точки зрения файловой структуры. в ноде я всё мог раздробить на модули, а здесь получается большой склад из файлов в корне проекта

например, так: project ├── routes.go ├── routes_stories_create.go ├── routes_stories_delete.go ├── routes_stories_update.go └── routes_stories_[...].go

Yury
22.01.2018
19:00:36
скорее всего быстрее, но на уровне погрешности, видно наверное будет только на супер точных тестах

Anton
22.01.2018
19:00:58
если к каждому файлу добавить ещё файл _test.go, то совсем каша

nezorflame
22.01.2018
19:01:24
божечки

Demuz
22.01.2018
19:02:16


nezorflame
22.01.2018
19:02:27
есть несколько подходов к структурированию

Google
nezorflame
22.01.2018
19:02:36
каждый со своего предыдущего языка тянет свой

Yury
22.01.2018
19:03:03
я бы сказал, что их не несколько, а дох;я)

Anton
22.01.2018
19:03:39
в го же тоже есть модули? Вы про какие модули?)
да, я понимаю, что можно разбить на разные пэкэджи, но скажем если я сделаю отдельный package routes, а он много от чего зависит, что определяется в package main, скажем, он базы данных, то надо в него передавать все эти переменные

nezorflame
22.01.2018
19:04:39
https://github.com/boltdb/bolt

пример, когда все в корне (кроме бинаря)

Demuz
22.01.2018
19:04:51
Или так даже еще понятней теперь что там тестится? Помоему каши нет.

Yury
22.01.2018
19:06:21
ну да, такой си стиль, но для среднего проекта уже начнет казаться жутью

nezorflame
22.01.2018
19:07:06


Anton
22.01.2018
19:09:11
я правильно понимаю, что, например, models, routers — это отдельные package?

nezorflame
22.01.2018
19:09:24
разумеется

Anton
22.01.2018
19:11:01
вот. например вы открываете базу в package db, как вы её потом передаёте в routers? у вас же рауты должны использовать базу

Yury
22.01.2018
19:12:08
берем инстанс из db?

Anton
22.01.2018
19:13:46
например так: package routers var ( db *gorm.DB ) func receiveDb(dbRef *gorm.DB) { db = dbRef }

Yury
22.01.2018
19:14:00
https://stackoverflow.com/questions/31218008/sharing-a-globally-defined-db-conn-with-multiple-packages-in-golang

Anton
22.01.2018
19:14:02
?

Anton
22.01.2018
19:17:36
да, я понял. makes sense.

Google
Demuz
22.01.2018
19:18:22
Если вам удобно, вы можете возвращать инстанс соединения с бд в любую точку приложения, через метод к примеру. Но я сам так не делаю. Сейчас покажу.



Anton
22.01.2018
19:21:17
да, понятно, спасибо.

Demuz
22.01.2018
19:22:49
Кстати, что есть best practice в "компилируемых" REST бекендах? Открывать\закрывать базу при каждом запросе, либо открыть только 1 раз при запуске приложения?

nezorflame
22.01.2018
19:23:04
открывать и держать

Demuz
22.01.2018
19:23:20
Эх, а я постоянно заново открываю )))

Yury
22.01.2018
19:23:25
да, понятно, спасибо.
А почему вы фреймворк взять не хотите, раз у вас в основном CRUD?

Demuz
22.01.2018
19:23:53
Так ему и с фреймворком нужно будет конектиться к бд же )

открывать и держать
Получается инстанс соединения с бд нужно будет "мьютить" при работе с ним? Или как?

Alexey
22.01.2018
19:26:12
Там по дефолту пул коннектов

Можно использовать параллельно прозрачно для себя

Demuz
22.01.2018
19:26:46
то есть это совсем не как со случаем с добавлением в массив да?

О, одной болью меньше )

Alexey
22.01.2018
19:26:59
Ага

Про пул надо проверить, правда, сколько он держит, вот это всё

Я не помню)

Demuz
22.01.2018
19:27:56
открывать и держать
Ахха. Теперь я понимаю что нет особо смысла соединять по unix сокету, если он 1 раз содинился и держит коннект )

nezorflame
22.01.2018
19:28:03
именно

Google
Anton
22.01.2018
19:28:38
и ещё у меня был вопрос — про валидацию пользовательских данных на раутах. изобрёл как-то так, используя gojsonschema, но мне почему-то кажется, что тут слишком много происходит: package main import ( "encoding/json" "net/http" "github.com/xeipuuv/gojsonschema" ) func createStoryHandler(w http.ResponseWriter, r *http.Request) { story := Story{} documentLoader, reader := gojsonschema.NewReaderLoader(r.Body) decodeErr := json.NewDecoder(reader).Decode(&story) validationResult, err := createStorySchema.Validate(documentLoader) if err != nil { panic(err) } if !validationResult.Valid() { handleValidationError(validationResult) return } if decodeErr != nil { panic(decodeErr) } if err := db.Create(&story).Error; err != nil { panic(err) } w.WriteHeader(http.StatusCreated) }

Demuz
22.01.2018
19:28:45
именно
А самые частые ошибки какие? Вот резко падает база. Там как окннекшн клозет будет?

или nil pointer?

Demuz
22.01.2018
19:29:37
Все равно по сокету шустрее)
Так по unix сокеты коннектят, потому что он время на самом коннекте экономит вроде А что еще можно там сэкономить? )

Anton
22.01.2018
19:29:38
А почему вы фреймворк взять не хотите, раз у вас в основном CRUD?
пока для прокачивания в гоу хочу всё руками написать, наверное, поэтому

Admin
ERROR: S client not available

Yury
22.01.2018
19:29:56
а ну тогда правильно

Andrew
22.01.2018
19:30:41
А есть книги по архитектуре в го?

Demuz
22.01.2018
19:30:46
TCP все равно оверхед и на просто пакеты даёт
Я блин вобще до сих пор не понимаю что это. Из-за парня который выше гооврил про валидацию )))

nezorflame
22.01.2018
19:31:18
если по стандартной либе

а не всяким ОРМ

то вот

https://golang.org/pkg/database/sql/#Open

Demuz
22.01.2018
19:31:24
TCP все равно оверхед и на просто пакеты даёт
НУ ладно, на продакшене буду все равно unix сокет юзать. Да и на сам гошный веб будет по Unix форвардиться.

Alexey
22.01.2018
19:34:01
НУ ладно, на продакшене буду все равно unix сокет юзать. Да и на сам гошный веб будет по Unix форвардиться.
У 95% проектов, кстати, вообще плевать, тсп там или что, не такие большие нагрузки

Demuz
22.01.2018
19:35:29
Но думаю опыт не помешает.

Там ска в sql драйвере стандартном в примере мелкую ошибку они сделали, не увидел ее, задолбался искать )

Google
Demuz
22.01.2018
19:37:55


nezorflame
22.01.2018
19:38:46
он не стандартный

впрочем, юзается много где

вот список https://github.com/golang/go/wiki/SQLDrivers

Yury
22.01.2018
19:43:21
для старта идеальное место вообще
а профи велосипеды пишут?)

nezorflame
22.01.2018
19:43:48
иногда приходится

я, правда, еще себя профи не считаю :)

Demuz
22.01.2018
19:48:34
а профи велосипеды пишут?)
Думаю программирование больше похоже на конструктор из уже имеющихся лего блоков, чем на сборку и модернизацию велика. )

Yury
22.01.2018
19:56:06
минутка философии: так то все в этом мире конструктор из готовых блоков

Vladimir
22.01.2018
19:56:41
на минутку, атом - тоже готовый блок

Sparrow
22.01.2018
20:00:20
собранный из кварков

Demuz
22.01.2018
20:01:53
Всё, мне объяснили что такое валидатор )

Aleksandr
22.01.2018
21:59:09
We have just released Go version 1.9.3, a minor point release. This release includes fixes to the compiler, runtime, and the database/sql, math/big, net/http, and net/url packages. View the release notes for more information: https://golang.org/doc/devel/release.html#go1.9.minor

Страница 1173 из 1674