LINUX.ORG.RU

За время существования Go, кто-нибудь хоть 1 большой web проект на нём запилил?

 , ,


0

6

Словно Lisp на ЛОРе, все в один голос советуют «просто использовать стандартную библиотеку». Но кто-нибудь следовал этому совету? Не могу найти ни одного проекта, все либо используют фреймворки (что карается отлучением из Go сообщества), либо в результате разрабатывают свой страшно закрученный фреймворк и таки используют фреймворк.

Самое масштабное, что нашёл - Go Playground: одна html страница и пара-другая URL'ов JSON'а, реализация выглядит IMO по-уродски. Тут мы знакомимся с паттерном f1(f2(fN(SomeHandlerFn)))), где fN:

func fN(f http.HandlerFunc) http.HandlerFunc {
	return func(w http.ResponseWriter, r *Request) {
		// Do something useful here...
		f(w, r) // Call the received handler function.
	}
}
что страшно напоминает callback'и в JavaScript. Не представляю, как таким макаром можно что-то более сложное написать: i18n, CSRF tokens, много форм, профиль пользователя, авторизация - вот это всё. Это же PHP4 style получится, только более низкоуровнево и многословно. И это, типа, эталон кода от главных разработчиков?



Последнее исправление: KanikulyKun (всего исправлений: 1)

25К loc сойдет за большой?

В качестве transport layer вышла своя библиотека таки. Вот чувак запилил по её мотивам что-то опенсорсное: https://github.com/happierall/soso-server

Но это только от браузера до сервисов с endpoint'ами, внутри между сервисами сообщения гоняются по grpc и nats

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

И, кстати, да, у нас весь рендеринг на клиенте.

Разве что qor используем для админки (он очень убогий, но сэкономил сотни времени): https://github.com/qor/qor

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

25К loc сойдет за большой?

Что прямо web-web проект? Типа linux.org.ru? Или набор компонентов, каждый из которых делает ничего, а некоторые JSON возвращают?

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

Вон в том треде рассказывал про кишки довольно подробно

Golang в крупных проектах

Если хочется потыкать — trendever дот com. Вполне веб-веб-проект: агрегация товаров, чаты, заказы, боты, админка, все-все-все...

Ну и пикча того же места, что я в том треде скриншотил, для динамики: http://storage9.static.itmages.ru/i/17/0324/h_1490385224_5386950_12d89bd068.png

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

Видел тред на одной странице.

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

Без JS не работает, так это просто набор API? И вы при этом обмазались неканоничной китайщиной с рефлексией. А как тестируете?

Всё же не подходит. Разработчики Go неоднократно в триппере заявляли, что stdlib для web dev'а хватит всем. Вот я пришёл, ожидаю, как в Play! или Rails запилить по tutorial'у бложик. А в Go, выясняется, его можно только на JS написать, оставив для Go только отдачу JSON. Ну и зачем тогда Go?

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

Без JS не работает, так это просто набор API?

Да

И вы при этом обмазались неканоничной китайщиной с рефлексией

Почему неканоничной? ORM как ORM

Разработчики Go неоднократно в триппере заявляли, что stdlib для web dev'а хватит всем

Ну знаешь, pure C тоже хватит всем, только вот писать ты это будешь сотню лет. Либы ускоряют разработку. А так ты фактически все равно напишешь либу под свои нужды

А в Go, выясняется, его можно только на JS написать

Забавная категоричность, ничего общего с реальностью не имеющая. У такого подхода есть и плюсы, есть и минусы. Но по-другому тоже можно делать — куча хороших шаблонизаторов есть. И даже один в стандартной либе, но мне он не очень нравится. pongo2 нравится

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

как тестируете

https://github.com/stretchr/testify

https://github.com/golang/mock

небольшой пакет для табличных тестов

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

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

Не мешай человеку маструбировать шквор толстыми типа техническими набросами

derlafff ★★★★★
()

Обычный general-purpose язык, конечно найдутся такие проекты. Про отлучение из сообщества за фреймворки явный наброс. Как и про 4-й пых.

emptykiev
()

Кому-то и на Асме ЦМСки писать ЭЛЕГАнТНО. Мне вот нравится что весь клиент-код вместе с данными в один жс пакуется, такой себе аки-бинарь, приложение стало монолитным файлом и тоненьким html с контейнером и включением скрипта. Кто-то тоже самое по поводу сервера испытывает - задеплоил эксешник, ну травмы детства: кресты, компиляция. Каждый дрочет.

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

А в Go, выясняется, его можно только на JS написать, оставив для Go только отдачу JSON. Ну и зачем тогда Go?

Затем что Go быстрее ноды и умеет в многопоток.

no-such-file ★★★★★
()

Go нужен для DevOPs. Пилить на нём веб-сервисы, то ещё «счастье».

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

Но по-другому тоже можно делать — куча хороших шаблонизаторов есть.

Собственно, поэтому тред и был создан. Я хочу увидеть хоть 1 проект, который по этому «другому» сделал. Не где-то в теории, а IRL. Именно рекомендуемым способом, используя только кошерные библиотеки, одобренные равинатом.

KanikulyKun
() автор топика

Ну мы сейчас пилим проект, где рест апи с вебсокетами на го. Используем gorm, echo, go-socket.io

Голый net/http тупо использовать, конечно.

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

Ну мы сейчас пилим проект, где рест апи с вебсокетами на го

echo

Таки фреймворк.

go-socket.io

Как всегда стандартная библиотека (x/net/websockets) столь стрёмна, что вместо неё приходится сторонний пакет использовать?

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

Есть GWT, и Kotlin из коробки уже умеет компилироваться в js. Но это ж в старой доброй Java тусовке ;)

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

По структуре qor/admin очень Revel напоминает, только кастрированный. Тут и контроллеры вместо HTTP Handler'ов, и Action'ы вместо HTTP Handler Function'ов. И рефлексия на месте. И всё в одном глобальном пакете. Только в отличие от первого, намешана бизнес-логика и реализация это-вовсе-нефреймворкного-фреймворка, в бизнес логике отсутствует деление на пакеты (модели-контроллеры-роуты-вспомогательные_функции - всё в пакете admin). В общем, это эталонное не-тру даже по меркам фреймворко-строителей.

KanikulyKun
() автор топика

Попробуй на гитхабе посмотреть отсортировав поиск, а потом срать.

Deleted
()

«Выглядит по-уродски» — ты же сам хотел на Go?

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

И всё в одном глобальном пакете.

Нет, там куча разных реп с разными фичами.

Все так плохо и в куче из-за плохого импорта подреп в go

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

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

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

Ищи по запросу «golang you don't need a framework». В каждом обсуждении один из самых заплюсованных ответов будет в стиле:

the Go way of writing apps is to use the all powerful stdlib

I don't think golang needs a web framework. What comes with the standard library is all that you need

You don't need a web framework in Go

Это второй по популярности ответ после «дженерики не нужны». Только вот авторы ЯП никогда подобного про дженерики не заявляли, они говорили «нужны, но мы не знаем как правильно, а задача не самая приоритетная на данный момент». Похожая ситуация с фреймворками. Авторы ничего не заявляли, бывший сотрудник ЖЖшечки (а ныне сотрудник Гоогле) в триппере высказал своё мнение: «stdlib хватит всем». И тут пошло: «у PHP4Go - свой особый путь, всё нужное уже присутствует, поэтому усложнять и создавать какие-то абстракции - глупо».

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

Ищи по запросу «golang you don't need a framework»

Нет, спасибо.

В каждом обсуждении один из самых заплюсованных ответов будет в стиле

На это пофиг. Написал примерно 40к строк на го, без учета сгенерированного кода. Лично мне нужны фреймворки, лично мне было бы комфортнее с дженериками. А на фанатиков плевать.

ymn ★★★★★
()

Кароч golang очень быстрый, но все зависит от рук. Если они из жопы то твой golang будет по скорости и производительности не чем не лучше чем PHP и прочей нежети.

Вот к примеру крупные сайты на golang: https://www.moovweb.com/ https://qortex.com/about

Вот крупный список вебсайтов юзающих golang

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

Т.е. я не ищу за тебя, а даю тебе направление, по которому ты можешь больше не показывать своё невежество и узколобость мышления.

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

Но сам ты этим «направлением», очевидно, не пользовался? В противном случае, уже давно назвал бы парочку-другую проектов, представляющих собой полноценное современное CRUD приложение на Go, реализующее Progressive Enhancement, написанное исключительно в «лучших практиках» (только stdlib). Но показывать «широлобость мышления» - не мешки ворочать, да?

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

Вот к примеру крупные сайты на golang:

https://www.moovweb.com/

Wordpress, PHP

https://qortex.com/about

После регистрации с выключенным JS: http://imgur.com/a/b79nb

Вот крупный список вебсайтов юзающих golang

Список компаний, а не сайтов. Едва ли хотя бы половина из них использует Go именно для web разработки.

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

полноценное современное CRUD приложение на Go

Из опенсорсных, которые пришли сразу в голову — Mattermost, Gogs.

реализующее Progressive Enhancement, написанное исключительно в «лучших практиках» (только stdlib)

Ничего не знаю про это. Только stdlib — не лучшая практика.

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

Gogs

Macaron - фреймворк, который пришлось навелосипедить, создавая gogs. Как всегда reflect в основе.

Mattermost

1. На Go только набор server-side API.

2. Видел на Reddit'е высказывание поклонника, назвавшего кодовую базу Mattermost - красивой и аккуратной. К сожалению, не могу оценить красоты решения, на это уйдут десятки часов: https://godoc.org/github.com/mattermost/platform/app Хоть они и используют только Gorilla и свою реализацию контекста, ни один наркоман не назовёт такую жирноту каноничным использованием Go.

Зато это отличная демонстрация того, что получается, когда продукт начинают писать манагеры Microsoft из отдела MS Office, а продолжают «medium level» разработчики с почасовой оплатой, нанятые на oDesk.

KanikulyKun
() автор топика

За время существования Go, кто-нибудь хоть 1 большой web проект на нём запилил?

А кто Вам сказал, что Go для «web» ?

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

Начал хорошо, а в конце сошёл на нет. Мальчик, тебе потроллить негде?

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

А кто Вам сказал, что Go для «web» ?

А кто вам сказал, что нет?

Я считаю, что абсолютно ничего не мешает реализовать инструмент, дающий опыт разработки под web сопоставимый с Rails / Django / Play! (с помощью кодогенерации ли или reflect). Ничего, кроме фанатиков, которые не только сами бесполезны, но и демотивируют других. Остаётся только понять их мотивацию. Если им известны лучшие подходы для разработки web приложений (полноценные CRUD, Progressive Enhancement, а не просто набор API endpoints и JS фронтенд), чем существуют сейчас - где результат? Где эти многочисленные тру вебсайты / приложения. А пока либо я что-то упускаю, либо всё это похоже на «веб фреймворки не нужны: я тут микроядро пишу, все веб фреймворки, что пробовал, оказались бесполезны, наверное это Clang way такой - особый путь».

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

Не изоморфичное, но интересное:
https://github.com/biosustain/potion-node
- вместо шаманского лапшеUI на клиента переносятся все концепции бэк-энда.
В итоге, изоморфичность шаблона - доли процента во всём коде и как бы не нужна.

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

А что там за концепции, в двух словах? Что-то я не могу пример из README распарсить. Это что-то типа meteor.js, где декларируешь типы данных, а потом на них подписываешься / публикуешь записи?

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

За окном 2017 год, 3 года как выяснили что бэкэнд-подходы на фронтэнде не работают: компоненты тупо лучше.

Изоморфичность мало нужна, как и серверсайд-рендеринг в веб-приложениях вообще. Да, для более-менее статичных сайтов ситуация другая, но они скучные.

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

У тебя автоматом в твоём приложении модели бэк-энда. С пажинацией и т.п.

Shadow ★★★★★
()

у людей, которые занимаются крупными проектами и в целом достаточно компетентные программисты, как правило, нет времени ходить по форумам и рассказывать, какой ЯП самый Ъ. А когда посмотрели на Go, поржали и пошли дальше работать.

Но кто-нибудь следовал этому совету?

Я вообще не советую писать на Go.

i18n, CSRF tokens, много форм, профиль пользователя, авторизация - вот это всё.

Преимущественно Go любят очень молодые программисты, и им еще интересно писать эту $@#?*$& с нуля. Напротив, люди, которые способны написать полезный фреймворк, будут писать его не на Go.

Тут мы знакомимся с паттерном f1(f2(fN(SomeHandlerFn)))), где fN

Начинающие любители ФП, которые еще не поняли, что ФП это не про «функция будет принимать функцию, которая вернет функцию, которая принимает функцию, которая ...».

Тем не менее, это достаточно простой способ сделать «ленивое» вычисление (в случае с хттп запросом это, конечно, бессмысленно).

Это же PHP4 style получится, только более низкоуровнево и многословно.

Именно так. Отсутствие адекватного способа управлять зависимостями только добавляют шарма (нет ничего, чтобы хоть наполовину было таким удобным, как npm, composer или maven, хотя бы потому, что в качестве репозитория предлагается использовать гит. ЛОЛ). В определенном смысле это настоящий Unix way!

anonymous
()

Я не понимаю зачем web писать на golang ? Для этого есть PHP, Python, Ruby, NodeJS. Golang хорош для микросервисов и консольных утилит. Там он отлично себя показывает. Не тыкайте голанг куда попало.

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

let the вторая страница срача begin

Я не понимаю зачем web писать на golang ? Для этого есть PHP, Python, Ruby, NodeJS.

Прекрасно подходит на замену всем названным языкам именно в плане веба. У пистона проблемы с многопоточностью, руби — свой, неповторимый вкус basic'а, и все — не компилируемые — производительность не та.

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

Я не понимаю, зачем web писать на PHP, Python, NodeJS? Для этого есть Golang. PHP, Python, NodeJS хороши для микросервисов. Там они себя отлично чувствуют. Не тыкайте PHP, Python, NodeJS куда попало.

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