@gogolang

Страница 1366 из 1630
Daniel
05.09.2018
15:59:38
блокчейн это распределенное хранилище
распределенное - это когда чать инфы на одной ноде, часть на другой те блокчейны, что я знаю - не распределенные, а реплицированные: на каждой ноде вся инфа

Ilya
05.09.2018
15:59:59
ну вопрос терминологии

Daniel
05.09.2018
16:00:14
я понимаю

я не понимаю, зачем нужна вводящая в заблуждение терминология

Google
Ilya
05.09.2018
16:00:38
мэйби имеется в виду что хранилище организовано децентрализованно

нет мастера от которого реплики

то есть не в смысле архитекутры а в смысле безопасности тысызыть

Artem
05.09.2018
16:01:54
привет а подскажите почему я не могу инициализировать мапу так? как это правильнее сделать? func main() { t := map[string]interface{} t["a"] = "23" fmt.Printf("%T - %v", t, t) }

те мне в мапе нужен объект любого типа string/int/bool

Dorian
05.09.2018
16:04:22
А make не круто?

Artem
05.09.2018
16:04:23
ох е( спасибо!

Daniel
05.09.2018
16:05:03
А make не круто?
очень не круто.

Dorian
05.09.2018
16:05:31
очень не круто.
Расскажите?

Мерлин
05.09.2018
16:05:34
привет а подскажите почему я не могу инициализировать мапу так? как это правильнее сделать? func main() { t := map[string]interface{} t["a"] = "23" fmt.Printf("%T - %v", t, t) }
Значение map объявляется как map[keyType]valueType{} В данном случае valueType = interface{}, поэтому правильно map[string]interface{}{}

Daniel
05.09.2018
16:07:01
Расскажите?
либа должна быть готова к импорту после go get. приложение должно быть готов к запуску после go get. если у вас есть Makefile - он или лишний, или ваш код требует чего-то кроме go get

Google
Daniel
05.09.2018
16:07:43
я подозреваю, что надо бы что-то с этим сделать, но пока не придумал, что

Мерлин
05.09.2018
16:08:16
я подозреваю, что надо бы что-то с этим сделать, но пока не придумал, что
Было бы очень неплохо чтобы в go get был бы аналог gomake

Или в build

Daniel
05.09.2018
16:08:42
ну вот пока не понятно

Мерлин
05.09.2018
16:09:21
Или в build
Это бы сильно упростило бы запуск кодогенерации

Daniel
05.09.2018
16:09:30
погоди

кодогенерация - инструмент для создателя ПО, а не для пользователя

Alexander
05.09.2018
16:10:45
очень не круто.
Правда, почему make() - не круто?

Daniel
05.09.2018
16:11:04
Правда, почему make() - не круто?
мы уже разобрались, что я не на тот вопрос ответил

Alexander
05.09.2018
16:11:12
А, sorry

Мерлин
05.09.2018
16:11:50
кодогенерация - инструмент для создателя ПО, а не для пользователя
Это не совсем так Есть кодогенерация, которую надо выполнять на этапе разработки пакета, например генерация protobuf или swag А в случае если она используется как замена дженериков, то она нужна на этапе разработки, и, имхо, должна запускаться автоматически ide или при сборке

Daniel
05.09.2018
16:12:41
go generate ./... чем тебе не угодил?

Мерлин
05.09.2018
16:13:55
go generate ./... чем тебе не угодил?
Тем что это по сути тупой make? Это только для первого типа кодгена Второй должен работать на лету во время разработки

Daniel
05.09.2018
16:14:49
да вот непонятно про на лету

по какому событию оно должно на лету запускаться?

Мерлин
05.09.2018
16:16:27
по какому событию оно должно на лету запускаться?
Либо при go build, либо, если есть умный редактор, когда нужно автодополнение и линтинг

Daniel
05.09.2018
16:17:27
а до go build твой код неполный, и синтаксическую проверку не пироходит, так, что ли?

Мерлин
05.09.2018
16:17:38
И я думаю что кодогенераторы должны быть не в виде бинарников, а в виде функций Как test

Google
Daniel
05.09.2018
16:18:12
эту мысль я не понял

если приложение собирается без генеренного кода - зачем он нужен такой

Olzhas
05.09.2018
16:18:53
@onokonem а есть пример go generate для самых тупых похапешников?

Daniel
05.09.2018
16:19:11
а если не собирается - его надо раньше go build запускать

Мерлин
05.09.2018
16:19:29
эту мысль я не понял
У тебя в проекте лежат функции вида func GenerateMyGenerator(*gen.Context) { ... }

Olzhas
05.09.2018
16:19:45
Бля

Daniel
05.09.2018
16:19:51
как это нет?

grpc, swagger

Kirill
05.09.2018
16:20:01
как это нет?
эхехехехехе

Мерлин
05.09.2018
16:20:09
Olzhas
05.09.2018
16:20:17
grpc, swagger
Надо поковырять

Olzhas
05.09.2018
16:20:57
@madgopher запили сваггер под греймворк

Daniel
05.09.2018
16:21:20
У тебя в проекте лежат функции вида func GenerateMyGenerator(*gen.Context) { ... }
ну я обычно, когда пишу свой генератор, кладу его main.go где-то в проект, а в go:generate пишу go run path/main.go

Мерлин
05.09.2018
16:21:22
У тебя в проекте лежат функции вида func GenerateMyGenerator(*gen.Context) { ... }
Которые вещаются как обработчики на конкретные типы например

Roman
05.09.2018
16:22:41
как относитесь к implicit конвертации non-const в const например в случае возвращения из функции? func CreateList(size int) const []string { newSlice := make([]string, size) for i := 0; i < size; i++ { newSlice[i] = "sample text" } // newSlice is implicitly converted // from "[]string" to "const []string" return newSlice }

Мерлин
05.09.2018
16:24:32
ну я обычно, когда пишу свой генератор, кладу его main.go где-то в проект, а в go:generate пишу go run path/main.go
Да, но только с нативной поддержкой Вместо парсинга и тд пишется одна функция, на вход которой подаётся кусок AST И которая запускается если только отслеживаемые места кода изменятся

Daniel
05.09.2018
16:25:18
ааа, вот чего ты хочешь! не забыть генерацию толкнуть! это да, это частая проблема

Kirill
05.09.2018
16:26:46
@madgopher запили сваггер под греймворк
Я уже реквестировал в одной либе поддержку грэйма

Мерлин
05.09.2018
16:26:47
ааа, вот чего ты хочешь! не забыть генерацию толкнуть! это да, это частая проблема
В том числе Так автоматически получаем версионирование кодогенераторов, и они не в виде стремных бинарников, собираемых из vendor Так глядишь нормальная экосистема кодгена появится

Google
Daniel
05.09.2018
16:27:53
и тут-то нам и нагенерят наши коллеги почитать всякого...

Мерлин
05.09.2018
16:28:25
А генеренный код не надо читать

И править

Daniel
05.09.2018
16:29:03
как появится "нормальная экосистема" - так придется читать :(

Мерлин
05.09.2018
16:30:52
как появится "нормальная экосистема" - так придется читать :(
Ну если вы активно работаете с чужими кодогенераторами, то уже больно А так хоть какие то общие стандарты

Кстати это неплохой способ завести типы суммы, не меняя язык

Daniel
05.09.2018
16:36:17
Кстати это неплохой способ завести типы суммы, не меняя язык
это как это?! я знаю один способ - на интерфейсах и тайпсвитче.

Admin
ERROR: S client not available

Roman
05.09.2018
16:37:27
я к новым implicit делам вобще плохо отношусь. И в данном случае - тоже
но тогда ведь придётся писать: return const(newSlice) не слишком ли это overhead'но? Я предполагаю что implicitly кастить не-const в const - не опасно. Опасно кастить const в не-const imlicitly!

я бы даже сказал что кстатиь const в не-const должно быть невозможно и в таком случае implicit cast не-const в const будет, по моему, уместен

Alexander
05.09.2018
16:38:43
но тогда ведь придётся писать: return const(newSlice) не слишком ли это overhead'но? Я предполагаю что implicitly кастить не-const в const - не опасно. Опасно кастить const в не-const imlicitly!
А что делать с функциями, которые и вызывают только для того, чтобы получить от них объект для дальнейшей работы с ним?

Roman
05.09.2018
16:39:29
Alexander
05.09.2018
16:40:37
Например, тупо, функция make([]interface{}) ?или типа того

Daniel
05.09.2018
16:40:38
я вот за эксплицитное всегда

Roman
05.09.2018
16:43:24
я вот за эксплицитное всегда
почему? есть на то объективная причина?

Google
Alexander
05.09.2018
16:50:16
Причина в том, чето если что-то делается, то не надо делать это по-тихому. Явное гораздо отчетливей, и часто лучше

почему? есть на то объективная причина?
хотя ты и не меня спросил :)

Мерлин
05.09.2018
16:51:32
это как это?! я знаю один способ - на интерфейсах и тайпсвитче.
Вот это самое, но только под капотом Ведь, если сделать как я говорю, то нет разницы между линтером и кодогенератором Сначала он генерирует набор типов обёрток для интерфейса mySumType, а потом проверяет валидность использования: чтобы не вернуть nil вместо mySumType, в type switch должны быть проверены все варианты, либо есть default

И тд

Roman
05.09.2018
17:03:18
Причина в том, чето если что-то делается, то не надо делать это по-тихому. Явное гораздо отчетливей, и часто лучше
ну хотя да... это предотвратит то, что мы можем случайно вернуть тот слайс как const, на который у нас есть mutable reference

Alexander
05.09.2018
17:23:18
ну хотя да... это предотвратит то, что мы можем случайно вернуть тот слайс как const, на который у нас есть mutable reference
Пропозал твой прочитал. Добавить мне нечего, кроме уже скаанного. Хочу слово const, :)

В смысле, слово уже есть, но хочу больше const, короче :)

Alexander
05.09.2018
17:25:05
Ну, уже есть такое ключевое слово. Но хочу, чтобы оно больше было похоже на const из плюсов

Roman
05.09.2018
17:25:23
я там кстати ещё вопрос по поводу констант vs имутабельных символов разобрал только-что: https://github.com/romshark/Go-2-Proposal---Immutability#35-how-are-constants-different-from-immutables

Alexander
05.09.2018
17:30:00
Кстати, кажется, что по логике Go должно быть не varName const []string), а наоборот - varName []string const) ?

я там кстати ещё вопрос по поводу констант vs имутабельных символов разобрал только-что: https://github.com/romshark/Go-2-Proposal---Immutability#35-how-are-constants-different-from-immutables
Блин, так бы хотелось, чтобы все было обругано на этапе компиляции, если надо, а не по ходу работы по разным памятям раскладывать потом и получать паники нафиг

Alexander
05.09.2018
17:36:08
потому что паники

или ты тоже экстемист-параноик и все подрят тестируешь, как маньяк какой-то? :)

Roman
05.09.2018
18:39:57
потому что паники
я про обратный порядок декларации, т.е. не const []string а []string const, зачем?

как в таком случае описать const [] const *Object ?

Michael
05.09.2018
18:40:59
const [] const * const Object

Alexander
05.09.2018
19:09:18
Ехал констант через констант Видит констант в констант констант Сунул констант констант в констант Конст за констант констант цап

Страница 1366 из 1630