Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230

Как в GO правильно структурировать проект (сайт)

06.03.2022, 12:32. Показов 816. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
хотелось бы понять, как в GO правильно структурировать проект (сайт)

хочу первым делом инициализировать все константы/переменные/структуры
для этого создал /vars/c.go, из которой подгружаю все константы
вот только он ругается, если из другого файла вызвать константу, хочет чтобы этот "vars" был имортирован непосредственно в файл
если есть /vars/vars.go и /vars2/vars2.go, то из vars2.go я НЕ могу вызвать константу из vars.go, даже если в обоих "package vars"

мне что в каждый файл надо будет импортировать всё?
а потом, если поменялось что-то, везде переписывать??
А как сделать что-то вроде заголовочных .h-файлов в C/C++ ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.03.2022, 12:32
Ответы с готовыми решениями:

Как правильно структурировать программу
У меня есть повторяющаяся процедура (или функция) Как правильно структурировать программу. Наверное, эту повторяющуюся процедуру выделить...

Как правильно структурировать проэкт с++ ?
Столкнулся с такой проблемкой, касающейся подключения заголовочных файлов в с++: Если посмотреть заголовочные файлы, к примеру пусть...

Как правильно структурировать файлы проекта?
Здравствуйте, у меня есть один вопрос, как правильно структурировать файлы проекта, например я видел в некоторых проектах, примерно...

10
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
07.03.2022, 17:28
Цитата Сообщение от полудух Посмотреть сообщение
А как сделать что-то вроде заголовочных .h-файлов в C/C++ ?
Ну создай себе файл headers.go и запихни туда все константы и типажи. И потом импортируй оттуда куда нужно.
Никаких специальных заголовчных файлов в go нет.

Цитата Сообщение от полудух Посмотреть сообщение
хотелось бы понять, как в GO правильно структурировать проект
По структуре проекта - зайди на гитхаб и нагугли go project-layout. Только помни что это не догма. И каждая команда делает так как ей удобнее. В соответствии с DDD и clean architecture.
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
07.03.2022, 17:31  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Ну создай себе файл headers.go и запихни туда все константы и типажи. И потом импортируй оттуда, туда куда нужно.
нужно в каждый файл...
чё вообще нет способа один раз только указать и юзать по всему проекту??
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
07.03.2022, 17:33
Цитата Сообщение от полудух Посмотреть сообщение
хочет чтобы этот "vars" был имортирован непосредственно в файл
А ты как хотел?

Добавлено через 1 минуту
Цитата Сообщение от полудух Посмотреть сообщение
чё вообще нет способа один раз только указать и юзать по всему проекту??
Если у тебя будет одно пространство имен. То есть один пакет. Пакет можно разбить на любое число файлов. Но только в пределах одного каталога.
Каталог == пакет
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
07.03.2022, 17:36  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
А ты как хотел?
в C/C++ ты один раз прописал в main и юзаешь по всему проекту
Цитата Сообщение от Garry Galler Посмотреть сообщение
Если у тебя будет одно пространство имен. То есть один пакет. Пакет можно разбить на любое число файлов. Но только в пределах одного каталога.
дичь это.
они что про MVC никогда не слышали?
в каждую модельку, в каждый контрл, в каждую вьюху надо импортить один и тот же файл...
а чё глобальные переменные не изобрели?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
07.03.2022, 17:40
Цитата Сообщение от полудух Посмотреть сообщение
они что про MVC никогда не слышали?
MVC в go никому не нужен.
Go это не сайтики. Go это микросервисы.
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
07.03.2022, 17:49  [ТС]
а какая модель используется?

Добавлено через 7 минут
говорят нужен всё ещё

Цитата Сообщение от Garry Galler Посмотреть сообщение
Go это не сайтики. Go это микросервисы.
Go - это и сайтики тоже
мне вот именно сайтики подавай
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
07.03.2022, 18:03
Цитата Сообщение от полудух Посмотреть сообщение
мне вот именно сайтики подавай
Для сайтиков ничего лучше PHP пока не придумано. Как бы не относиться к самому PHP.

В Go, есть, конечно, китайский MVC фреймворк beego. Его как раз и юзают те, кто не смог вылезти из Spring, Django или Laravel.

Но в основном go web это микрофреймворки типа echo, gin или fiber.

Цитата Сообщение от полудух Посмотреть сообщение
нужен всё ещё
Over 95% of the "debate" I see on the matter completely fails right here. The "original" definition of MVC as given in the Design Pattern book observably fails to correspond to what most people actually implement when they claim they're using an MVC design. (For one thing, the original MVC has no network communication in it, and whether people like it or not, network communication is such a fundamental change that it must be a major design consideration. Anyone who says otherwise is just deluded as to how difficult it is.) So, err... what exactly is MVC?

Nobody knows. But they're pretty sure it's good. Sometimes they're so sure it's good that they very completely know that MVC is the only good design, and if it isn't MVC, it isn't good. But... errr... what is MVC again? You can get a dozen conflicting answers to that. Which means there literally isn't an answer.

The solution, in my considered-for-several-years-now opinion, is to just ignore "MVC" entirely. You can't design your code in accordance with "something. I'm not sure what exactly, but something. Models. It definitely has models. Although their exact responsibility and nature I'm not too clear on either. But definitely models. And definitely put the words 'view' and 'controller' in your code, too." Just because you have a name doesn't mean you have a thing that corresponds to that name.

What you need is to separate your concerns, and to Don't Repeat Yourself. The rest will fall out naturally.

I will also say that actually creating directories that are called "model", "view", and "controller" will drive you absolutely batty in Go, because of the way packages drive visibility. In conventional OO languages it would not be too surprising to see some "friend" relations between the bits and pieces. In Go, you'll be forced to have things public that really shouldn't be public. It's not how Go code "wants" to be split up. Go code "wants" to be split up by concern, so, for instance, all the "user" stuff goes in one package. If you insist on MVC, the user's model and core view and controller should probably go in one "user" package.

Although, honestly, you're just not going to see much benefit from that vs. simply separating responsibilities manually. MVC was made for a problem that the vast majority of web apps simply do not have. MVC was made for when you need a lot of mixing and matching between multiple views at a time, so you have to abstract at that level. Think a 3D CAD program with multiple views on the same model, all of which can interact with it in realtime. Your web app does not look like that, so spending design budget on a design pattern for a problem you don't have is just cargo cult programming... and not even very good cargo cult programming. Meanwhile, you do have problems that the CAD programs don't, like the aforementioned fundamental inclusion of network communication, which is what you ought to be spending your design budget on.

In conclusion... no, MVC isn't a good pattern for Go web apps, because it's a terrible pattern for web apps in general.
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
08.03.2022, 11:38  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Если у тебя будет одно пространство имен. То есть один пакет. Пакет можно разбить на любое число файлов. Но только в пределах одного каталога.
Каталог == пакет
а подкаталоги? смогут они видеть переменные из НАДкаталога и наоборот?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.03.2022, 13:34
Цитата Сообщение от полудух Посмотреть сообщение
а подкаталоги? смогут они видеть переменные из НАДкаталога и наоборот?
Нет. Область видимости пакета - каталог. Все прочее нужно импортировать.


Ты пляшешь вокруг несуществующей проблемы. Просто перестань мыслить шаблонами других ЯП и пытаться натягивать сову на глобус.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
09.03.2022, 22:33
полудух,

в C/C++ ты один раз прописал в main и юзаешь по всему проекту
В C/C++ за такое бьют по рукам и больно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.03.2022, 22:33
Помогаю со студенческими работами здесь

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

Как правильно структурировать файлы в web-модуле?
Добрый день. Вот я пишу многостраничный веб - проект. Несколько вопросов: 1. css - стили, js, странички - нужно выносить в...

структурировать сайт - хтмл отдельно, пхп отдельно
Добрый день! прошу развернутый ответ, либо хорошую ссылку. вобщем, вопрос в заголовке. имеется сайт, который активно использует данные из...

Как структурировать данные
У меня есть таблица с рядом данных, но разбросанных по разным строчкам. Можно их как-то структурировать, чтобы они шли по по порядку? ...

Как правильно организовать проект
Всем привет, снова я с тупыми вопросами Есть одна идея для проекта на Java. На бумаге уже все есть и работает)) В качестве IDE у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru