Anonymous
?
Anonymous
а какой синтаксис?
Anonymous
или где почитать?
Anonymous
вот допустим https://play.golang.org/p/pQeJodUzyn8
Anonymous
как мне втулить вызвать параметр структуры используя strg
Anonymous
хочу так типа https://play.golang.org/p/saSvECs2RAl
Мерль
или где почитать?
Очень рекомендую Go tour пройти, полчаса займёт
Anonymous
https://play.golang.org/p/p5vwkeq86wb
не ты не понял мне нужно не назначить поле
Anonymous
смотри мою вторую ссылку
Anonymous
я хочу что бы название параметра динамически формировалось
Alexander
хочу так типа https://play.golang.org/p/saSvECs2RAl
Так не получится, это не PHP/JS. Но можно использовать map вместо структуры
Мерль
Никак, используй 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 торчат. Не убирают для совместимости с ранними версиями
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
Давно разжевано https://stackoverflow.com/questions/18420596/whats-the-difference-between-newstruct-and-struct-in-go
Это я читал и прекрасно понимаю, но &S{} короче и легче для рефакторига если вдруг решить добавить все таки поля в S
Anonymous
Вопрос стоял почему бы его не убрать?
Anonymous
Если одни приимущества на стороне этого варианта. Может кто то может привести реальные юзеркейсы?
Ruslan
Я не знаю. Я не академик, я просто делаю сайты и изучаю новое. Задайте вопрос создателям Го.
Anonymous
Единообразие, кмк
Ну если что я 10 лет программирую на всевозможных языках и даже писал на такой экзотике как Uno, а то, что здесь много неофитов именно на Go, то это логично, первая версия всего 6 лет назад релизнулась, а популярность стал набирать только года 3-4 назад.
Ruslan
Вопрос стоял почему бы его не убрать?
Я рад, что вы изучаете Го так досконально. Фразой - "Я не знаю. Я не академик, я просто делаю сайты и изучаю новое. Задайте вопрос создателям Го." я не хотел вас обидеть. Пошу прошения
Ruslan
*Прошу прощения
Alexander
Вопрос стоял почему бы его не убрать?
Я не знаю, обсуждается ли вариант убрать его в Go 2, но в Go 1.x убрать new нельзя из-за вот этого:
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 } Скорее всего это тоже вопрос к авторам компилятора
Vladislav
Это про одно и тоже.
Alexander
В Go структуры часто передаются в функции по указателю, чтобы избежать копирования (структура может быть довольно "тяжелой").
Anonymous
& это получение указателя. А * это тип.
Если там так же как в C/С++, то это указатель на тип
Anonymous
В Go структуры часто передаются в функции по указателю, чтобы избежать копирования (структура может быть довольно "тяжелой").
Так же как и в С и C++, но в C++ можно еще пердавать и по ссылке, так же не будет никокого копирования
Vladislav
Это тип, означающий указатель на тип.
Alexander
В С есть указатели и ссылки. В Го только указатели
Alexander
(кстати, понимание указателей и ссылок, а также их отличие - это часто большая проблема для изучающих С/С++)
Anonymous
Например в C++: void set(Foo* x) { x->val = 1; } Или void set(Foo& x) { x.val = 1; }
🏳️ Phil
В С есть указатели и ссылки. В Го только указатели
В С нет ссылок. Я кстати впервые сегодня услышал о существовании оных )))
Anonymous
В C++
Anonymous
В C да, их нету, только указатели
🏳️ Phil
А вру. Я так понимаю в Питоне ссылки как раз
Alexander
Да, я забыл. Давно на С ничего не писал. Ну так вот, в Го, можно считать, нет указателей, а есть только аналог ссылок из С++
Alexander
приблизительный
🏳️ Phil
В Go как раз чисто указатели
Anonymous
А вру. Я так понимаю в Питоне ссылки как раз
В Python, Java, C#, JS и многих других языках только ссылки для объектов и при чем неявные
🏳️ Phil
Нет
Ммм?
Anonymous
Все компиляторы у которых есть сборщик муссора оперируют исключительно с ссылками и запрещают манипуляции с указателями, оно и понятно
Anonymous
Но в Go тоже GC, а не скажем ARC
Alexander
да даже не важно, как именно они реализованы. Я к тому, что работают они похоже на ссылки в С++. Указывают на переменную, арифметики нет, нужны для передачи изменяемых параметров в функции
🏳️ Phil
Я более чем уверен, что арифметика есть
Alexander
А в чем смысл вопроса тогда? Почему назвали указателем, а не ссылкой? Потому что под капотом указатель.
Anonymous
Правда в C# для этого используют ref и out, но там просто ссылки неявные
Alexander
Арифметика, вроде бы, есть в unsafe
Alexander
но лучше туда не лезть :)
🏳️ Phil
Арифметика, вроде бы, есть в unsafe
Но на самом деле Go это и есть unsafe :)))))))
Anonymous
Ага, значит все таки в unsafe есть
🏳️ Phil
но лучше туда не лезть :)
Да. Поэтому мы "считаем", что типа арифметики нет
🏳️ Phil
Ага, значит все таки в unsafe есть
А как ты думаешь Go на Go написан?
Anonymous
Как кстати с маршаллингом у Go? Еще до этого не дошол
Alexander
https://golang.org/pkg/unsafe/ - см. type Pointer
🏳️ Phil
Надо кстати перейти со своего коронного "четверть века Golang" на "а как Go написан на Go?". Это ведь очень интересный вопрос
Alexander
А что там про четверть века?
🏳️ Phil
А что там про четверть века?
Ну мы же все знаем, что Go не 6 лет и это не новый язык придуманный google? Или подождите, не все?
Alexander
э-э-э-э
🏳️ Phil
ААААААААААААААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!