LINUX.ORG.RU

golang в web? AI?

 , ,


0

5

Кто-то пишет или писал под web на Go?
Стал посматривать в сторону Go, та как захотелось чего-то менее абстрактного. Код понимаем, но всё равно пока лезу в документацию по каждому чиху.

Что нравится

  • предоставляемые инструменты. Ты вообще не зависишь от IDE, редактора etc.
  • документация
  • адын бинарник, docker говорит «спасибо», да и я тоже

Что не нравится

  • документация (нет примеров с описанием, почему так и что это даёт)
  • может пока не разобрался, но если навернуть технологий то становится понятно желание раскидать всё на микросервисы. Код избыточен и приходится придумывать/следовать неким правилам (абстракциям), а тут он (Go) по внутренним ощущениям не очень подходит. Или я не разобрался.

Кто-то использует в мире ML? Удобно как в Python или приходится приседать?

Если сравнивать с той же Nodejs/Python? А если с серьёзными вещами (C#/Java)?

Поделитесь опытом.



Последнее исправление: Eulenspiegel (всего исправлений: 5)
Ответ на: комментарий от rtxtxtrx

На нем написан Docker, который тоже клиент-сервер по сути

Docker - это клей вокруг Linux’овского API и может быть написан вообще на чём угодно, даже на bash’е. Собственно, его первая версия целиком была на Python, а среди нынешних конкурентов – решения на Ruby. Выбор именно Go, скорее, был мотивирован модой того времени (будь проект помоложе, переписали бы его на Rust, а постарше – на Си).

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

Лучшее потратить время на что-то более сложное и функциональное.

Подробнее!

Если переписать print(‘Hello World!’) на Го и скомрилить

2mb?

При компиляции бинарника Го самостоятельно полезет в интернет для скачивания библиотек.

сам пока с версионированием в нём не разобрался, с master ветки тянуть пакет, что-то не вызывает…

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

На баше не может. На нем на самом деле боль писать что-то крупное. В golang хотя бы есть модульность. Из жирноскриптов на баше, которые популярны есть distrobox, который лишь дергает докер. А для докера хватило бы питона

rtxtxtrx ★★
()
Ответ на: комментарий от anonymous
~/workspace/hello-world-go
❯ go build hello-world.go

~/workspace/hello-world-go
❯ chmod +x hello-world

~/workspace/hello-world-go
❯ ./hello-world
Hello, world!

~/workspace/hello-world-go
❯ du -h hello-world
2.1M    hello-world

~/workspace/hello-world-go
❯ cat hello-world.go
package main

import "fmt"

func main() {
        fmt.Println("Hello, world!")
}
rtxtxtrx ★★
()

Кто-то пишет или писал под web на Go?

Если коротко на Go вы пишете фрейморк под каждый проект. То что в PHP, Python, Ruby 99% офисных работников даже не знает, в Go необходимо знать. В Go сразу собирается бинанник который содержит и сервер который слушает порт, также систему routing и плюс обработчики на каждый тип запроса.

Основа Web приложения функция обработчик: func(w http.ResponseWriter, r *http.Request)

Функции могут вкладываться друг в друга, создавая шаблон Middleware (книга №4 3.3.4. Chaining hanlders and hanlder functions). Процесс разработки на Go отличается легкостью тестирования, можно тестирвать на разных слоях Web приложения: отдельно обрабочики или уже на уровне мультиплекстора (книга №2 9 Testing and Benchmarking). Разрботка на Go это «низкоуровневая» разработка в масштабах Web, вы уже сразу пишете сервер (книга №3 Part 3. Application-level Pogramming). Плюсы - минимальное потребление ресурсов.

Книги:

  1. Learning Go. An Idiomatic Approach to Real-World Go Programming. (c) Jon Bodner
  2. Go In Action (c) William Kennedy
  3. Network Programming with Go (c) Adam Woodbeck
  4. Go Web Programming (c) Sau Sheong Chang

Только прочитав определенные главы этих книг, можно уже разговаривать о Web разработке на Go. Хотите разобраться - читайте книги. И вообще пока книга №1 не прочитана - говорить не очем. Надо сначла понять идеоматику Go, основные принципы программирования на этом языке.

На LOR пишут всякие глупости, например «В Go нет ООП». Объекты есть, интерфейсы есть, ООП нет, однако.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от rtxtxtrx

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

I’m sorry that I long ago coined the term «objects» for this topic because it gets many people to focus on the lesser idea. The big idea is «messaging» – that is what the kernal of Smalltalk/Squeak is all about (and it’s something that was never quite completed in our Xerox PARC phase).

(c) Alan Kay link

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.

(c) Alan Kay создатель Small Talk link

Полиморфизм и Наследование это уже надстройки над ООП.

I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning – it took a while to see how to do messaging in a programming language efficiently enough to be useful).

(c) Alan Kay link

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от rtxtxtrx

Нет try/catch — уже не торт

Там есть panic/recover. Это не «не торт» это другая философия языка, которую можно попытаться понять, а можно не разбираясь написать «плохой язык».

lbvf50txt
()

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

Код читаем. Не надо разгадывать загадки.

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

В Go принято возвращать ошибки, а не recover вызывать. Это типичная node.js лапша выходит до того как промисы и async/await ввели. Там такая говнина была:

const fs = require('fs');

fs.readFile('file1.txt', 'utf8', (err, data1) => {
    if (err) {
        console.error('Error reading file1:', err);
        return;
    }

    fs.readFile('file2.txt', 'utf8', (err, data2) => {
        if (err) {
            console.error('Error reading file2:', err);
            return;
        }

        fs.writeFile('output.txt', data1 + data2, (err) => {
            if (err) {
                console.error('Error writing file:', err);
                return;
            }
        });
    });
});

И на Go сейчас такая же лапша. Он урод и в нем нет ООП.

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

Go для вебмакак типа меня когда бухаю, rust для более критичных вещей. go просто тупо бьет по рукам когда ты пишешь говно, а если все-таки умудрился его написать, его легко переписать, он для того чтобы квадратное несли, а круглое катили, а не наоборот. А не для того, чтобы движки для истребителей проектировать.

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

Код на любом языке нечитаем, если пользоваться блокнотом вместо IDE. Это не касается лишь хипстерских поделий на 300 строчек (у моей страницы-визитки их и то 3000 с лишним).

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

Если код говно, то он и с IDE не меняет свою природу, а код ядра линуха читается с вимплюсгрепом вполне себе сносно.
А по мне для Си просто песней песен читается код редиса, просто, понятно, эффективно.

у моей страницы-визитки их и то 3000 с лишним

Нашел чем хвастаться, на моей визитке 3 строки, и она помещается в визитницу.

Tark ★★
()
Последнее исправление: Tark (всего исправлений: 2)
Ответ на: комментарий от anonymous

Доклад составил

Анончик, ты ещё забыл про неотключаемую ошибку компиляции «declared and not used». А ещё там табы для отступов.

К плюсам, на мой взгляд, можно отнести ещё то, что на Сишке можно писать прям внутри go-файла (cgohttps://go.dev/blog/cgo) и, в целом, интероперабельность с Си на неплохом уровне.

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

К плюсам, на мой взгляд, можно отнести ещё то, что на Сишке можно писать прям внутри go-файла (cgohttps://go.dev/blog/cgo) и, в целом, интероперабельность с Си на неплохом уровне.

По таким критериям лучше перл брать, там есть Inline::C, а интероперабельность получше, чем у го.

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

Код начинающих питонистов это просто спагетти из незнамо чего, его только в биореактор.

Код начинающих готистов

Код готистов всегда только в биореактор (вместе с готистами), и не важно начинающие они или нет.

firkax ★★★★★
()

Стал посматривать в сторону Go, та как захотелось чего-то менее абстрактного.

Ну так тебе никто не помешает писать на го вставками на асме. Только тебе еще сильнее не понравится :)

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

Там композиция применяется, но это не одно и тоже

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

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

Это паскаль 21 века

Это обжект паскаль, т.е. оберон с фигурными скобочками. Многословие – байпродакт некотрого «минимализма» (ТМ), когда чтоб жить и дышать надо сначала поприседать.

отсутствия ООП.

Вот ООП в 21 веке, кстати, чаще всего не нужен, когда есть компонентная модель и прочий ECS, которые и работают быстрее и не плодят «ООПные»(ТМ) сущности из «тонкого воздуха», в которых «ехал индирекшон через индирекшон», вызывая бесконечные сбросы кэша.

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

не надо грязи

golang не так сильно взлетел обо async волна случилась много позже

да и CSP Хоара не всякая фронт(бэк)живтоне сможет не то что-бы понять и простить - да даже изобразить понимание что бы не выбиваться из коллектива

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

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

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

ересь!

ООП это декомпозиция на взаимодействующие обьекты(субьекты если есть конкупаралельность)

для экономии компонентность через расширяемые типы

в еретическом изводе ООП смешали теорию и технологию т.е вариант реализации(плюсы) выдали за фундированную теорию

это(то что реализация стала предметом начётничества) проявления падения систем массового образования ставшее очевидной в последней трети 20 столетия

qulinxao3 ★☆
()