Anonymous
?
Мерль
Anonymous
а какой синтаксис?
Anonymous
или где почитать?
Anonymous
вот допустим https://play.golang.org/p/pQeJodUzyn8
Anonymous
как мне втулить вызвать параметр структуры используя strg
Anonymous
хочу так типа https://play.golang.org/p/saSvECs2RAl
Мерль
Anonymous
смотри мою вторую ссылку
Anonymous
я хочу что бы название параметра динамически формировалось
Мерль
Никак, используй map
Anonymous
понял, спасибки
Anonymous
а в мапе можно хранить структуры , это нормальная практика?
Alexander
https://tour.golang.org/moretypes/19
Alexander
серьёзно, пройди go tour - полчаса времени и на порядок всё понятнее
Ruslan
http://tmrts.com/go-patterns/
Anonymous
Сразу обозначу в go недавно, а в этой группе и подавно. Учитывая философию и концепцию языка, в нем все минималистично и более не менее однозначно. Почти. Я вот не могу понять, почему не убрали аллокацию через new?
ведь:
new(Struct) и &Struct{} это одно и тоже, только второй вариант более гибкий и позволяет заодно же провести и инициализацию. Есть еще make, но он для слайсов контейнеров, его наличие я еще могу понять
Если уже такое обсуждалось заранее сорри
🏳️ Phil
Скорее всего ноги ещё из Alef торчат. Не убирают для совместимости с ранними версиями
Ruslan
Anonymous
Коллеги, кто как, свои приложения в продакшен заводит?
Не сказать что это продакшен, пишу для себя любимого, но рабочая схема у меня на данный момент такая. Захожу на сервер,
mkdir project
cd project
git init
git add .
git commit -m "first commit"
Теперь создадим отдельную ветку production
git checkout -b production
На домашнем ПК
git clone ssh://user@8.8.8.8/home/project
Я могу такое позволить потому что я заранее сделал ключи для ssh. На сервере, переключаемся на master
git checkout master
Теперь, нужно создать скрипт, который при пуше смержит production с master
и перезапустит мой проект
cd project
touch .git/hooks/post-receive
nano .git/hooks/post-receive
Вставляем туда
#!/bin/sh
cd ..
env -i git merge production
sudo systemctl stop app
sudo systemctl start app
Разумеется у нас есть конфиг systemd - /etc/systemd/system/app.service, через него происходит стоп и старт проекта. Как-то так.
Anonymous
Вопрос стоял почему бы его не убрать?
Anonymous
Если одни приимущества на стороне этого варианта. Может кто то может привести реальные юзеркейсы?
Ruslan
Я не знаю. Я не академик, я просто делаю сайты и изучаю новое. Задайте вопрос создателям Го.
Roman
Anonymous
Единообразие, кмк
Ну если что я 10 лет программирую на всевозможных языках и даже писал на такой экзотике как Uno, а то, что здесь много неофитов именно на Go, то это логично, первая версия всего 6 лет назад релизнулась, а популярность стал набирать только года 3-4 назад.
Ruslan
Вопрос стоял почему бы его не убрать?
Я рад, что вы изучаете Го так досконально.
Фразой - "Я не знаю. Я не академик, я просто делаю сайты и изучаю новое. Задайте вопрос создателям Го." я не хотел вас обидеть. Пошу прошения
Ruslan
*Прошу прощения
Alexander
It is intended that programs written to the Go 1 specification will continue to compile and run correctly, unchanged, over the lifetime of that specification. At some indefinite point, a Go 2 specification may arise, but until that time, Go programs that work today should continue to work even as future "point" releases of Go 1 arise (Go 1.1, Go 1.2, etc.).
Alexander
https://golang.org/doc/go1compat
Anonymous
Второй философский вопрос:
Зачем нужны указатели в Go без арифметики указателей (понятное дело из-за GC)? Если нужно передать объект именно по ссылке, то используем именно ссылку или вообще все это дело делаем неявно и оставляем на волю компилятора как в других языках. А указатели без арифметики не имеют смысла имхо.
Только потому что так верно:
func (self *Foo) Set(x int) { self.val = x }
А так компилятор не позволяет - не довод:
func (self &Foo) Set(x int) { self.val = x }
Скорее всего это тоже вопрос к авторам компилятора
Anonymous
Vladislav
Alexander
Vladislav
Это про одно и тоже.
Alexander
В Go структуры часто передаются в функции по указателю, чтобы избежать копирования (структура может быть довольно "тяжелой").
Anonymous
Vladislav
Это тип, означающий указатель на тип.
Alexander
В С есть указатели и ссылки. В Го только указатели
Alexander
(кстати, понимание указателей и ссылок, а также их отличие - это часто большая проблема для изучающих С/С++)
Anonymous
Например в C++:
void set(Foo* x) {
x->val = 1;
}
Или
void set(Foo& x) {
x.val = 1;
}
Anonymous
В C++
Anonymous
В C да, их нету, только указатели
🏳️ Phil
А вру. Я так понимаю в Питоне ссылки как раз
Alexander
Да, я забыл. Давно на С ничего не писал. Ну так вот, в Го, можно считать, нет указателей, а есть только аналог ссылок из С++
Alexander
приблизительный
🏳️ Phil
🏳️ Phil
В Go как раз чисто указатели
Roman
🏳️ Phil
Anonymous
Все компиляторы у которых есть сборщик муссора оперируют исключительно с ссылками и запрещают манипуляции с указателями, оно и понятно
Anonymous
Но в Go тоже GC, а не скажем ARC
Alexander
да даже не важно, как именно они реализованы. Я к тому, что работают они похоже на ссылки в С++. Указывают на переменную, арифметики нет, нужны для передачи изменяемых параметров в функции
🏳️ Phil
Anonymous
🏳️ Phil
🏳️ Phil
Я более чем уверен, что арифметика есть
Alexander
А в чем смысл вопроса тогда? Почему назвали указателем, а не ссылкой? Потому что под капотом указатель.
Anonymous
Правда в C# для этого используют ref и out, но там просто ссылки неявные
Alexander
Арифметика, вроде бы, есть в unsafe
🏳️ Phil
Alexander
но лучше туда не лезть :)
Anonymous
Ага, значит все таки в unsafe есть
Anonymous
Как кстати с маршаллингом у Go? Еще до этого не дошол
Alexander
https://golang.org/pkg/unsafe/ - см. type Pointer
🏳️ Phil
Надо кстати перейти со своего коронного "четверть века Golang" на "а как Go написан на Go?". Это ведь очень интересный вопрос
Alexander
А что там про четверть века?
Alexander
э-э-э-э
🏳️ Phil
ААААААААААААААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!