LINUX.ORG.RU

Что за идиотизм с импортами в гуланге?

 ,


1

6

Вот уже несколько говнореп смотрю и вижу внутри репы github.com/hipstor/cococo импорты вида: import github.com/hipstor/cococo/internal-lib/functions.

Т.е. это нормально, что при форке мне нужно будет каждый сраный файл проверять на наличие таких высеров?

Это норма, или хипсторы слишком недоразвиты, чтобы понять смысл ..?

Перемещено leave из desktop

★★★★★

Последнее исправление: derlafff (всего исправлений: 4)
Ответ на: комментарий от feofan

В виме, конечно же. gofmt и прочие отлично работают.

А ты предлагаешь в super-puper-goide.exe, который, судя по всему, в попу ломается от любой неожиданной фигни? нет, спасибо

derlafff ★★★★★
() автор топика
Ответ на: комментарий от derlafff

У некоторых вимеров, например, не работал автокомплит, пока они писали не в GOPATH. Сходу вряд ли что-то еще вспомню.

feofan ★★★★★
()
Ответ на: комментарий от hateyoufeel

В чьём HEAD? Гипотетического проекта или его зависимостей?

Всех зависимостей, но это неважно... Рассчитывать на работоспособность кода в HEAD в принципе глупо.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Сейчас появились костыли, которые позволяют с этим жить. Да и в реальности разработчики го-либ очень редко ломают код в мастере. Но спроектировано криво, согласен. Просто гуглу с их монорепо так удобно, а на остальных...

feofan ★★★★★
()
Ответ на: комментарий от beastie

Как по мне, дрочить в присядку — это заставлять код зависеть от текущей директории и имени и владельца репозитория

derlafff ★★★★★
() автор топика
Последнее исправление: derlafff (всего исправлений: 1)
Ответ на: комментарий от feofan

Да, есть gopkg.in, но в реальности без него пока еще ничего не ломалось.

derlafff ★★★★★
() автор топика
Ответ на: комментарий от waker

Не вижу ничего страшного в самой возможности. Кстати, на лоре можно даже слепо следовать тенденции: у старперов и чуваков с закостеневшими мозгами подгорает - значит все сделали правильно. Скоро придет эдик и будет кричать на нескольких страницах от ужаса.

Deleted
()
Ответ на: комментарий от Deleted

Не вижу ничего страшного в самой возможности.

понимаешь, когда есть возможность разыменовать нулевой указатель — это называется «возможность, в которой нет ничего страшного».

когда есть возможность инклудить напрямую мастер бранч с гитхаба — это ФГМ.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от beastie

Ну почему же нерабочий. Вполне себе рабочий. Только API изменили, например. Это я к тому, что в go-комьюнити крайне низкий уровень инженерной культуры.

leave ★★★★★
()
Ответ на: комментарий от leave

Только API изменили, например.

На страницах проектов, которые собираются ломать API в ридми обычно крупно написано: under heavy development.

в go-комьюнити крайне низкий уровень инженерной культуры

Какие-то мы с тобой разные сообщества наблюдаем.

feofan ★★★★★
()
Ответ на: комментарий от waker

это ФГМ.

Это как минимум удобно для небольших проектов. Примени пламегаситель и еще раз подумай об этом используя логику.

Deleted
()
Ответ на: комментарий от leave

Только API изменили, например.

Мне кажется, ты не очень знаешь, как работает golang. ;)

https://golang.org/doc/faq#get_version

Packages intended for public use should try to maintain backwards compatibility as they evolve. The Go 1 compatibility guidelines are a good reference here: don't remove exported names, encourage tagged composite literals, and so on. If different functionality is required, add a new name instead of changing an old one. If a complete break is required, create a new package with a new import path.

beastie ★★★★★
()
Ответ на: комментарий от Deleted

Это как минимум удобно для небольших проектов. Примени пламегаситель и еще раз подумай об этом используя логику.

логика в том, что я не могу никогда заранее знать размер проекта. поэтому go заранее негоден.

(disclaimer: вышенаписанным я _не_ признаю, что это дерьмо удобно для проектов какого-либо размера)

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от beastie

should try

Must я здесь не вижу. В любом случае, вся инфраструктура вокруг языка держится исключительно на доверии.

leave ★★★★★
()
Ответ на: комментарий от leave

Это я к тому, что в go-комьюнити крайне низкий уровень инженерной культуры.

+1

отлично сформулировал

anonymous
()
Ответ на: комментарий от feofan

Какие-то мы с тобой разные сообщества наблюдаем.

Можно начать с того, что сам язык откровенно слаб как инструмент для нормальных инженерных решений.

anonymous
()

А если не секрет, то зачем ты взял go?

anonymous
()
Ответ на: комментарий от waker

когда есть возможность инклудить напрямую мастер бранч с гитхаба — это ФГМ

Что тебе мешает не делать так, а воспользоваться _штатным_ инструментом для вендоринга, и хранить в своих сорцах еще и сорци нужных тебе сторонных либ, на нужных тебе коммитах, и собирать с них?

Или что мешает использовать любой из внешних механизмов привязки зависимостей, когда оно собирает либу не по мастеру, а по коммиту?

Я не говорю что это лучшее что мог дать нам кришна, но и в pip'ах gem'ах и прочих сладостях говна по ложке. Хотя второе не должно оправдывать первое.

iu0v1
()
Ответ на: комментарий от anonymous

Можно начать с того, что сам язык откровенно слаб как инструмент для нормальных инженерных решений.

Пруфы будут? Или это откровения диванного аналитика?

feofan ★★★★★
()
Последнее исправление: feofan (всего исправлений: 1)
Ответ на: комментарий от iu0v1

и хранить в своих сорцах еще и сорци нужных тебе сторонных либ

...которые тоже тянут код в житхаба.

anonymous
()
Ответ на: комментарий от iu0v1

Что тебе мешает не делать так

мне мешает то, что так делают другие, чьи поделки, вероятно, мне пришлось бы использовать. и я нигде не говорил, что pip или gem чем-то лучше - говно из соседней бочки, как по мне.

waker ★★★★★
()

Есть godep и прочие тулы сторонние для решения этой проблемы. Гуглеры так и говорили, мы не писали эту фичу для вас. Пусть сообщество создаст удобный инструмент. Критикуешь - предлагай! :)

abc
()
Ответ на: комментарий от waker

я не могу никогда заранее знать размер проекта. поэтому go заранее негоден.

И? Не вижу причины по которой инклуды должны быть прибиты гвоздями во веки веков. Вообщем, все твои аргументы как минимум в этом треде в духе 'У меня подгорело!!!111'.

Deleted
()
Ответ на: комментарий от Deleted

все твои аргументы как минимум в этом треде в духе 'У меня подгорело!!!111'.

по-моему, у кого тут горит - вполне очевидно. мне-то чего? я go не пользуюсь, и не собираюсь :)

waker ★★★★★
()
Ответ на: комментарий от beastie

Packages intended for public use should try to maintain backwards compatibility as they evolve. The Go 1 compatibility guidelines are a good reference here: don't remove exported names, encourage tagged composite literals, and so on. If different functionality is required, add a new name instead of changing an old one. If a complete break is required, create a new package with a new import path.

Господи, это просто охрененно.

Мне кажется, ты не очень знаешь, как работает golang. ;)

Судя по цитате выше, golang не работает.

hateyoufeel ★★★★★
()
Ответ на: комментарий от abc

Критикуешь - предлагай! :)

Предлагаю выкинуть golang и забыть о нём как о страшном позоре для всей индустрии.

hateyoufeel ★★★★★
()
Ответ на: комментарий от feofan

Пруфы будут?

https://golang.org/doc/

Каких пруфов ты хочешь? Язык слеплен на коленке, лишен кучи зарекомендовавших себя инженерных решений и имеет странные и сомнительные с инженерной точки зрения фичи, вроде того, что обсуждается тут.

Не зря на go, в основном, переходят php'эшники и js'ники иногда...

anonymous
()
Ответ на: комментарий от anonymous

А как правильно?

ну я не истина в первой инстанции, но npm без -g, и засунуть все в сорсконтроль при необходимости, нормально.

waker ★★★★★
()
Ответ на: комментарий от waker

мне мешает то, что так делают другие, чьи поделки, вероятно, мне пришлось бы использовать

Ну, предположим, ты почему-то бы решил использовать go. И был бы вынужден использовать чужие поделки, да еще и с GH. Что бы тебе помешало создать организацию/юзера, которому бы ты нафоркал нужных тебе либ, и свои сорци завязать на свои же репы? Или даже наклонить эти либы в свой личный гит/ртуть, и тянуть от себя?

iu0v1
()
Ответ на: комментарий от anonymous

Язык слеплен на коленке

4.2

лишен кучи зарекомендовавших себя инженерных решений

Вроде исключений? Гугл запрещает использовать их своим плюсокодерам, например.

имеет странные и сомнительные с инженерной точки зрения фичи, вроде того, что обсуждается тут

Ну не без этого.

Не зря на go, в основном, переходят php'эшники и js'ники иногда...

А эта инфа откуда?

В общем, в основном голословные утверждения вместо аргументов.

feofan ★★★★★
()
Ответ на: комментарий от zz

Да тут уже не пойму о чём тред. Понабежало людей, что о инструменте только слышали байки, и кричат что это всё кошмар, и словно их кто-то заставляет весь этот кошмар использовать.

По теме: мне удобней абсолютными. Но это удобно, бо у нас всё по внутренним репам. Для внешних программ это может и не очень, но опять таки лично для меня проблем нету, если нужно поменять 6ть строчек импортов (о неугодных импортах можно прознать стандартными средствами, к тому же).

iu0v1
()
Ответ на: комментарий от feofan

Вроде исключений?

Вроде ADT и параметризуемых типов

Гугл запрещает использовать их своим плюсокодерам, например.

Потому что их держит существующая кодовая база, которой у Go не было.

tailgunner ★★★★★
()
Ответ на: комментарий от feofan

Гугл запрещает использовать их своим плюсокодерам, например.

Гугл много чего им запрещает. И это маразм.

anonymous
()
Ответ на: комментарий от iu0v1

Что бы тебе помешало создать организацию/юзера, которому бы ты нафоркал нужных тебе либ, и свои сорци завязать на свои же репы?

я предполагаю, что go при сборке куда-то загоняет скачанные либы в кеш на диске.

если этот кеш можно загнать в сорсконтроль вместе с моими исходниками, и сказать системе сборки чтобы без разрешения новое не качала, и чтобы без костылей, то мне бы наверное ничего не мешало.

по сути, получилось бы то же самое что в ноде, но все равно видеть прямые ссылки на всякие гитжабы и битбакеты в исходниках - это жесть.

это еще хуже чем всякие com.google.appengine.api.modules.ModulesServiceFactory в жабе (название было нагуглено для примера).

waker ★★★★★
()
Ответ на: комментарий от waker

но все равно видеть прямые ссылки на всякие гитжабы и битбакеты в исходниках - это жесть

Прямая ссылка там только на вид. На деле это что-то типа личного иерархического ада, что лежит у тебя на харде.

Т.е. исходники не качает во время билда. Пакет ты качаешь/обновляешь отдельно и своими руками. А во время билда оно уже берёт то, что было скачано тобой.

И пример за ад (т.е. ссылка в исходниках, это не ссылка в веб, это ссылка на внутренние хранилище, что соблюдает путь, повторяющий вид оригинальной ссылки; как-то так) :

$ tree -L 3 $GOPATH/src
/home/lord/BIN/go1.4.2/GOPATH/src
├── 9fans.net
│   └── go
│       ├── acme
│       ├── draw
│       ├── games
│       ├── LICENSE
│       ├── plan9
│       ├── plumb
│       └── README
├── code.google.com
│   └── p
│       ├── go.net
│       ├── graphics-go
│       └── jamslam-freetype-go
├── github.com
│   ├── BurntSushi
│   │   ├── xgb
│   │   └── xgbutil
│   ├── eknkc
│   │   └── amber
│   ├── golang
│   │   └── lint
│   ├── gorilla
│   │   ├── context
│   │   ├── mux
│   │   ├── securecookie
│   │   └── sessions
│   ├── go-sql-driver
│   │   └── mysql
│   ├── iu0v1
│   │   └── daslog
│   ├── jstemmer
│   │   └── gotags
│   ├── kisielk
│   │   ├── errcheck
│   │   └── gotool
│   ├── kr
│   │   └── pty
│   ├── nsf
│   │   └── gocode
│   ├── rogpeppe
│   │   └── godef
│   ├── SpiritOfStallman
│   │   └── attar
│   ├── yosssi
│   │   └── ace
│   └── ziutek
│       └── mymysql
└── golang.org
    └── x
        ├── crypto
        └── tools
iu0v1
()
Ответ на: комментарий от iu0v1

Так, и что будет, если я форкну либу и накачу на нее свой патч? Менять ее импорт во всех файлах ручками?

loz ★★★★★
()
Ответ на: комментарий от feofan

Вроде исключений? Гугл запрещает использовать их своим плюсокодерам, например.

Мы пока еще не все в гугле работаем, и не везде исключения считаются bad practice. И они точно лучше чем когда либа на пару тысяч строк кода возвращает тебе строку типа «bad_request» в качестве ошибки, вместо подробного объекта с описанием состояний и стектрейсом.

loz ★★★★★
()
Ответ на: комментарий от tailgunner

Потому что их держит существующая кодовая база, которой у Go не было.

Нет. Запрещает потому, что люди ошибаются. Исключения ловятся не всегда. Чтобы этого избежать с ошибками работают как с данными.

Вроде ADT и параметризуемых типов

Этого действительно нет. Приводит к тому, что нельзя написать нормальные библиотеки для работы с коллекциями. Но это не смертельно.

feofan ★★★★★
()
Ответ на: комментарий от feofan

Вроде исключений? Гугл запрещает использовать их своим плюсокодерам, например.

За это надо бить. И не потому что ексепшны это хорошая чтука, а потому что потом вылавливаешь чудесатые хрени вроде «new вернул nullptr, но мы это не проверили». причем в либе блять.

anonymous
()
Ответ на: комментарий от iu0v1

ну а вместо этого пути

/home/lord/BIN/go1.4.2/GOPATH/src

можно использовать что-то вроде «$HOME/myproject/modules»? без костылей? или на каждый проект отдельного юзера надо?

waker ★★★★★
()
Ответ на: комментарий от loz

возвращает тебе строку типа «bad_request» в качестве ошибки, вместо подробного объекта с описанием состояний и стектрейсом.

Пинать автора такой библиотеки. Ошибка в го - это не просто строка, и позволяет многое. В том числе стектрейсы туда тоже можно засунуть, если очень хочется.

feofan ★★★★★
()
Ответ на: комментарий от anonymous

new вернул nullptr, но мы это не проверили

это где new умеет возвращать nullptr?

edit: вообще не один ли хрен — не проверил на NULL, или не обработал exception? если память кончилась - все равно капец. ну да, бывает что из-за ошибки в данных ты пытаешься выделить например террабайт памяти. но это надо проверять еще ДО вызова new/malloc.

TL;DR если new вернул null, или кинул эксепшн — процессу капец в любом случае.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от feofan

Ты сам то понимаешь что несешь? Пинать автора либы, когда ты сделал критический хотфикс на релиз? Ты в продакшен давно писал то? Я бы посмотрел как ты отмазываешься что проебал все сроки из-за того, что автор либы второй день не отвечает тебе и вобще в свадебном путешествии.

loz ★★★★★
()
Ответ на: комментарий от loz

Так, и что будет, если я форкну либу и накачу на нее свой патч? Менять ее импорт во всех файлах ручками?

Скорее да, чем нет. Для среды твой форк это новый и самостоятельный пакет. И если ты хочешь его использовать, то и путь будет другим (что-то в духе было 'gh/user/libname', стало 'gh/loz/libname'). При большом желании, ты можешь просто в место сорцов user'а положить свои, и зажевать это дело. Тогда пути менять не нужно будет. Но такое тут будет грязным и не очень понятным костылём.

iu0v1
()
Ответ на: комментарий от iu0v1

Да я так смотрю что половина го это грязные и непонятные костыли. В _нормальной_ системе пакетов способ получения пакета полностью отделен от его имени и использования в коде.

loz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.