Cadabrum
(Рисовал как мог)
В следующий раз попробуй draw.io
.
Это API'шник, который я хочу раздробить ради удобства (сложно ориентироваться в тысячах строк кода в одном файле). Каждый компонент - набор вызовов(пользователи, друзья, и т.д.). Все эти вызовы используют несколько функций, которые я думаю запихнуть отдельный файл и импортировать в каждый компонент. Нормальная ли такая структура?
Anonymous
UML диграма так себе. Кстати есть на го какие то MVVP/MVVM паттерны ?
Pawel
UML диграма так себе. Кстати есть на го какие то MVVP/MVVM паттерны ?
не разу не сталкивался с доказанной пользой от этих костылей на Го, но для больных джавой головного мозга всегда есть возможность нагородить что-то подобное
Anonymous
Видел utron и revel но что они не впечатлили
Anonymous
не разу не сталкивался с доказанной пользой от этих костылей на Го, но для больных джавой головного мозга всегда есть возможность нагородить что-то подобное
Когда это микросервис то нет смысла, когда же это сложный и требующий дальнейшего масштабирование сервис, то это очень даже имеет смысл
Илья
UML диграма так себе. Кстати есть на го какие то MVVP/MVVM паттерны ?
патерны есть, бери и пиши, или вам фреймворк?
Anonymous
Да, легковестный фреймворк, который не несет ничего лишнего, только задает структуру и интерфейсы
Pawel
Когда это микросервис то нет смысла, когда же это сложный и требующий дальнейшего масштабирование сервис, то это очень даже имеет смысл
хотелось бы увидеть работающий пример + теоретическое обоснование каким образом шизофреничные паттерны из мира фронтенда могут быть полезными
Anonymous
На фронтенде к слову сейчас используют redux и mobx, а саги пришли с бэкенда. Вы не в теме
Pawel
Ruby on rails уже стал фронтенд фреймфорком?)
там мвц насколько я знаю, и это типичный пример отстойного фреймворка, который больше проблем создаёт чем решает
MOS2502
Товарищи! Подскажите, каким еще образом можно представить алгоритм обработки среза, задача такая: пока числа идут последовательно - показываем массив, если число отличается от предыдущего более чем на 1 выдаем отдельно это число, пример здесь: https://play.golang.org/p/Bhswz8F_rl4
Andrei 🦉
Ruby on rails уже стал фронтенд фреймфорком?)
а зачем вам нужно переписывать ВЕСЬ бэк с руби(или что там у вас) на го?
Anonymous
а зачем вам нужно переписывать ВЕСЬ бэк с руби(или что там у вас) на го?
Никто не собирается этого делать, боже упаси! Просто хотелось бы иметь легко масштабируюемую и стандартизированную архитектуру для бэка на go
Pawel
например сама идея контроллеров - она не очень. что конкретно в рубях доказывает Синатра, на которой всё проще, чем на rails
MOS2502
Выглядит, как какое-то тестовое задание при прёме на работу. Какой ожидаемый результат для указанного примера?
На самом деле никакого приема, сам для себя копаю. Указанный результат достигнут, но как мне кажется достигнут криво, так как в срезе не обрабатывается array[0], но этот момент я могу разрулить ифами, мне интересно, есть ли в самом языке инструменты для работы с подобным?
Васильев Виктор
Это почти как питон)
MOS2502
Обычно в Go самое простое решение - правильное.
Спасибо, так же придерживаюсь этого правила во всем :)
Васильев Виктор
Задача как бы простая. Тут внутреннее
Васильев Виктор
не нужно
Васильев Виктор
просто проходишь по массиву и смотришь и возвращаешь число если находишь если дошло до конца перебора возвращаешь массив
Pawel
UML диграма так себе. Кстати есть на го какие то MVVP/MVVM паттерны ?
Вообще все эти Model-View-SomeElse пошли от джава-дедовщины начала нулевых, когда мидл-джависты заставляли джунов чистить картошку алюминевой ложкой, навязывая им изучение бесполезной херни
Pawel
Вообще если уж хотеть годный web фреймворк, который бы действительно решал проблемы, это хотеть GWT. Сомневаюсь, что что-то подобное когда нибудь появится на Го.
Anonymous
Серьезно?) вообще то это пошло из C++ и книги “Банды четырех»
Pawel
Серьезно?) вообще то это пошло из C++ и книги “Банды четырех»
вы удивитесь, но теоретически основы все этой херни заложил ещё Алан Кей в смолтолке. но какое это имеет значение?))
Andrey
Праздный вопрос, что быстрее a.foo = newSlice или b.bar = &newSlice (будет ли копироваться слайс, если присваивать не по ссылке) в этом примере https://play.golang.org/p/GMv7E5--3X8
Илья
он не будет копироваться в обоих случаях
Alexander
Слайс - это структура из размера и указателя на массив с данными. И даже при простом копировании по значению сами данные не копируются, так то разница если и есть, то минимальная.
Илья
во втором случае придётся еще пойнтер создать
Alexander
он не будет копироваться в обоих случаях
Данные не будут копироваться, а вот структура слайса будет. И она тоже содержит внутри себя указатель.
Alexander
👍
Andrey
Да, вопрос про данные. Но дополнение про структуру слайса очень кстати. Теперь стало намного понятнее.
Andrey
Еще раз спасибо!
Andrey
The run-time data structure holding the pointer, length, and capacity
Alexander
https://github.com/golang/go/blob/master/src/runtime/slice.go#L11 :)
Alexander
Ребят, привет! Кто-нибудь может пояснить за контекст? На авторизации беру jwt-токен, из него беру структуру пользователя и пробрасываю в контекст context.WithValue(r.Context(), "curUser", claims.User). Затем, в другом пакадже, беру контекст по строковому ключу "curUser", привожу тип r.Context().Value("curUser").(models.User) и всё зашибись. Но golint ругается, что нельзя использовать базовый тип для ключа. Я правильно понимаю, что это мне предлагается таскать по всем пакаджам кастомный тип для ключа контекста? Аля type contextKey string? Зачем это? Забить можно? :)
Илья
стоит завести, чтобы случайно не перетереть
Alexander
heavycharged
Не очень ясно понял, что имеется ввиду. Буду медитировать и читать гугл. Спасибо, Слава :)
Погугли golang context example, у них в блоге есть пример использования, там есть пакет для работы с IP который пакует в контекст IP и выдергивает из контекста IP.
heavycharged
там как раз не экспортируемый тип есть, вот собственно код: https://blog.golang.org/context/userip/userip.go
heavycharged
и сама статья https://blog.golang.org/context
Alexander
Погугли golang context example, у них в блоге есть пример использования, там есть пакет для работы с IP который пакует в контекст IP и выдергивает из контекста IP.
Ага. Я читал, но на очень поверхностно. Спасибо, сейчас вдумчиво перечитаю. Я просто новичок в программировании, не всегда сходу понятны best practices.
Pawel
А есть библиотека чтобы в ней декларативно задать html-разметку, закешировать и отрендерить в http response?
Pawel
по типу как в jsx
Anonymous
Либу для p2p ктонить встречал?
hypnopumpia
Либу для p2p ктонить встречал?
почему бы не спросить гугл перед тем как задавать вопрос в чате? https://www.google.com/search?channel=fs&q=golang+p2p&ie=utf-8&oe=utf-8
Aleksey
Есть использовавшие/писавшие One Wire библиотеку?
Aleksandr
Ты лол) в гугле уже искал
и в чем у тебя проблема возникла тогда?
heavycharged
это лохчейн, многое объясняет
🎉
Это пипец какой-то, оказалось если объявить глобальную var db *sql.DB и проинициализировать её, в надежде что одно соединение будет работать постоянно и нет нужды переподключаться, никуа не работает такой способ. Или я где-то туплю?
heavycharged
https://play.golang.org/p/BZGYg6SLDnk
heavycharged
почему вариативная функция не видит юзера John?
Alfred
как прочитать только первую линию из файла?
heavycharged
как прочитать только первую линию из файла?
scanner := bufio.NewScanner(file) scanner.Split(bufio.ScanLines) scanner.Scan() scanner.Text()
heavycharged
https://play.golang.org/p/BZGYg6SLDnk
частично понял, что Join это метод у User, и первый элемент слайса уходит в User (можно проверить, если сделать u User, и затем записать в лог. Но что-то я не натыкался на такое поведение прежде. Может где есть описание почему так происходит?
Andrey
1. Показать код 2. Показать ошибку
🎉
Теоретически понимаю, что должно быть одно подключение, а практически оно только вначале и потом всё.
Andrey
db.close() есть в коде?
Andrey
Максимальное кол-во подключений поставил?
🎉
db.close() есть в коде?
func init() { db, err := InitDB("./book.db") if err != nil { log.Fatal(err) } defer db.Close() }
Andrey
Лол
🎉
Максимальное кол-во подключений поставил?
Нет, а зачем, я на локале тестирую.
🎉
Лол
Было по другому, в другом месте.))
Andrey
func init() { db, err := InitDB("./book.db") if err != nil { log.Fatal(err) } defer db.Close() }
Ты понимаешь что у тебя в этой фукнции дефер бесполезный и почему?