@gogolang

Страница 760 из 1630
Marlik
20.01.2018
22:38:58
Коллеги, кто как, свои приложения в продакшен заводит?
Не сказать что это продакшен, пишу для себя любимого, но рабочая схема у меня на данный момент такая. Захожу на сервер, 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, через него происходит стоп и старт проекта. Как-то так.

Max
20.01.2018
22:41:53
Давно разжевано https://stackoverflow.com/questions/18420596/whats-the-difference-between-newstruct-and-struct-in-go
Это я читал и прекрасно понимаю, но &S{} короче и легче для рефакторига если вдруг решить добавить все таки поля в S

Вопрос стоял почему бы его не убрать?

Google
Max
20.01.2018
22:42:54
Если одни приимущества на стороне этого варианта. Может кто то может привести реальные юзеркейсы?

Ruslan
20.01.2018
22:45:03
Я не знаю. Я не академик, я просто делаю сайты и изучаю новое. Задайте вопрос создателям Го.

Max
20.01.2018
22:52:45
Единообразие, кмк
Ну если что я 10 лет программирую на всевозможных языках и даже писал на такой экзотике как Uno, а то, что здесь много неофитов именно на Go, то это логично, первая версия всего 6 лет назад релизнулась, а популярность стал набирать только года 3-4 назад.

Ruslan
20.01.2018
22:53:21
Вопрос стоял почему бы его не убрать?
Я рад, что вы изучаете Го так досконально. Фразой - "Я не знаю. Я не академик, я просто делаю сайты и изучаю новое. Задайте вопрос создателям Го." я не хотел вас обидеть. Пошу прошения

*Прошу прощения

Alexander
20.01.2018
23:14:48
Вопрос стоял почему бы его не убрать?
Я не знаю, обсуждается ли вариант убрать его в Go 2, но в Go 1.x убрать new нельзя из-за вот этого:

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.).

https://golang.org/doc/go1compat

Max
20.01.2018
23:17:35
Второй философский вопрос: Зачем нужны указатели в Go без арифметики указателей (понятное дело из-за GC)? Если нужно передать объект именно по ссылке, то используем именно ссылку или вообще все это дело делаем неявно и оставляем на волю компилятора как в других языках. А указатели без арифметики не имеют смысла имхо. Только потому что так верно: func (self *Foo) Set(x int) { self.val = x } А так компилятор не позволяет - не довод: func (self &Foo) Set(x int) { self.val = x } Скорее всего это тоже вопрос к авторам компилятора

Google
Vladislav
20.01.2018
23:37:19
Это про одно и тоже.

Alexander
20.01.2018
23:39:05
В Go структуры часто передаются в функции по указателю, чтобы избежать копирования (структура может быть довольно "тяжелой").

Max
20.01.2018
23:39:37
& это получение указателя. А * это тип.
Если там так же как в C/С++, то это указатель на тип

В Go структуры часто передаются в функции по указателю, чтобы избежать копирования (структура может быть довольно "тяжелой").
Так же как и в С и C++, но в C++ можно еще пердавать и по ссылке, так же не будет никокого копирования

Vladislav
20.01.2018
23:41:04
Это тип, означающий указатель на тип.

Alexander
20.01.2018
23:41:19
В С есть указатели и ссылки. В Го только указатели

(кстати, понимание указателей и ссылок, а также их отличие - это часто большая проблема для изучающих С/С++)

Max
20.01.2018
23:42:06
Например в C++: void set(Foo* x) { x->val = 1; } Или void set(Foo& x) { x.val = 1; }

Phil
20.01.2018
23:43:11
В С есть указатели и ссылки. В Го только указатели
В С нет ссылок. Я кстати впервые сегодня услышал о существовании оных )))

Max
20.01.2018
23:43:23
В C++

В C да, их нету, только указатели

Phil
20.01.2018
23:44:54
А вру. Я так понимаю в Питоне ссылки как раз

Alexander
20.01.2018
23:45:18
Да, я забыл. Давно на С ничего не писал. Ну так вот, в Го, можно считать, нет указателей, а есть только аналог ссылок из С++

приблизительный

Phil
20.01.2018
23:46:12
В Go как раз чисто указатели

Max
20.01.2018
23:46:35
А вру. Я так понимаю в Питоне ссылки как раз
В Python, Java, C#, JS и многих других языках только ссылки для объектов и при чем неявные

Phil
20.01.2018
23:47:49
Нет
Ммм?

Max
20.01.2018
23:48:03
Все компиляторы у которых есть сборщик муссора оперируют исключительно с ссылками и запрещают манипуляции с указателями, оно и понятно

Google
Max
20.01.2018
23:48:20
Но в Go тоже GC, а не скажем ARC

Alexander
20.01.2018
23:48:41
да даже не важно, как именно они реализованы. Я к тому, что работают они похоже на ссылки в С++. Указывают на переменную, арифметики нет, нужны для передачи изменяемых параметров в функции

Phil
20.01.2018
23:50:46
Я более чем уверен, что арифметика есть

Alexander
20.01.2018
23:51:01
А в чем смысл вопроса тогда? Почему назвали указателем, а не ссылкой? Потому что под капотом указатель.

Max
20.01.2018
23:51:17
Правда в C# для этого используют ref и out, но там просто ссылки неявные

Alexander
20.01.2018
23:51:25
Арифметика, вроде бы, есть в unsafe

Alexander
20.01.2018
23:51:47
но лучше туда не лезть :)

Phil
20.01.2018
23:51:55
Арифметика, вроде бы, есть в unsafe
Но на самом деле Go это и есть unsafe :)))))))

Max
20.01.2018
23:52:07
Ага, значит все таки в unsafe есть

Phil
20.01.2018
23:52:16
но лучше туда не лезть :)
Да. Поэтому мы "считаем", что типа арифметики нет

Ага, значит все таки в unsafe есть
А как ты думаешь Go на Go написан?

Max
20.01.2018
23:52:34
Как кстати с маршаллингом у Go? Еще до этого не дошол

Alexander
20.01.2018
23:53:09
https://golang.org/pkg/unsafe/ - см. type Pointer

Phil
20.01.2018
23:54:23
Надо кстати перейти со своего коронного "четверть века Golang" на "а как Go написан на Go?". Это ведь очень интересный вопрос

Alexander
20.01.2018
23:55:29
А что там про четверть века?

Phil
20.01.2018
23:56:07
А что там про четверть века?
Ну мы же все знаем, что Go не 6 лет и это не новый язык придуманный google? Или подождите, не все?

Google
Alexander
20.01.2018
23:56:29
э-э-э-э

Phil
20.01.2018
23:56:43
ААААААААААААААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!

Alexander
20.01.2018
23:56:58
я ньюфаг. Расскажи

Max
20.01.2018
23:58:28
Ты хочешь поведать про Go! ?

Если да, то это тоже самое что говорить, что JavaScript унаследовался от Java

Phil
21.01.2018
00:00:02
Это игрушка Пайка. Любимая игрушка Пайка. Не им написанная, о он влюбился в неё с первого взгляда с первого релиза в 1992 году, в котором он и участвовал сам. Были ещё там ветки, ещё что, но в итоге это стало его игрушкой на всю жизнь. Это язык Alef. С сильно переделанным рантаймом (с учетом того что не взлетел). Есть только две вещи, почему нельзя провести прямую линию - копирастия, google не может впрямую пиарить эту историю, и программы на Alef не будут компилиться на Go и наоборот - полная несовместимость

Я надеюсь, вы не думаете, что Go действительно кто-то портировал на Plan9? :)) Нет, просто наработки и уши Plan9 там вычистили чуть не к 1.5 только

Давно не смотрел - Go до сих пор точки с запятыми препроцессором расставляет?

Max
21.01.2018
00:02:14
А ну, так у Алефа он унаследовал только многопоточность и каналы

Phil
21.01.2018
00:02:28
Это просто он и есть

Max
21.01.2018
00:03:55
Да Alef даже пофункциональнее выглядит: http://doc.cat-v.org/plan_9/2nd_edition/papers/alef/ref

Phil
21.01.2018
00:04:27
Да. Если почитать артикли того же Пайка или там Ритчи тех лет - там понятно почему

Они там с Alef собственно зашились на работе с памятью. А с GC они не смогли придумать как реализовать часть функционала

Alexander
21.01.2018
00:06:51
Любопытно, да. Посмотрел сейчас на этот Alef - да, есть много параллелей с Go. Странно, что я про него ни разу раньше не слышал

Phil
21.01.2018
00:07:07
Я на самом деле не к тому, что надо называть Go Alef'ом или там значки вешать и памятники ставить. Я только к тому, что надо понимать, что история этого языка совершенно откровенно не начинается в 2007 году. И нет, это не то чтобы "с него взяли". Это одна и та же команда разработчиков с одной и той же платформой.

Например при вое про дженерики надо помнить, что разработчики Go знали о дженериках, когда большинство нытиков ходило разве что в подгузники, а их любимого языка (Java) ещё не было в природе.

И использование дженериков с каналами - это не теория, а вполне себе практика. Разработчикам явно не понравившаяся

Google
Phil
21.01.2018
00:11:20
И синтаксис кстати придумывать не надо - он есть :))))))

Max
21.01.2018
00:17:22
Кстати Алеф еще получил развитие в виде Limbo

А Go и не скрывают, что одним из вдохновителей был как раз Limbo. Так что между Go и Алефом есть родственная связь, не пойму почему Google что то там отрицает

Phil
21.01.2018
00:19:22
Кстати Алеф еще получил развитие в виде Limbo
limbo совсем не похож и он таки с опкодом и своей vm

А Go и не скрывают, что одним из вдохновителей был как раз Limbo. Так что между Go и Алефом есть родственная связь, не пойму почему Google что то там отрицает
Это кстати забавно, учитывая, что у Limbo синтаксис сильно отличается от Go. Рантайм - да, могли очень сильно на нём наработать. С учетом правда vm

Max
21.01.2018
00:21:20
Сказал бы: https://www.ibm.com/developerworks/ru/library/l-inferno_plan9_3/index.html

Те же срезы, короткая запись для объявления переменных, туплеты, каналы и т д

Phil
21.01.2018
00:24:33
Те же срезы, короткая запись для объявления переменных, туплеты, каналы и т д
Ну это да. Логично. Опять те же разработчики. Но там он совсем не похож. И я в третий раз говорю - там vm

Max
21.01.2018
00:27:12
А еще он поддерживает ARC с фоллбэком на GC для циклических указателей. Впервые такое вижу

Marlik
21.01.2018
02:56:09
Код type Config struct { Name string `json:"name"` } func GetFromConfig() string { file, err := os.Open("./config.json") if err != nil { log.Fatal(err) } defer file.Close() decoder := json.NewDecoder(file) cnf := Config{} err = decoder.Decode(&cnf) if err != nil { log.Panic(err) } return cnf.Name } Вопрос, как бы мне так извернуться что-бы через GetFromConfig() получать аргумент, и возвращать его? func GetFromConfig(s string) string { ... return cnf.s Как-то так. Или если есть какие получше варианты?

Marlik
21.01.2018
03:26:14
Это запускается один раз при старте.

Получаю буквально три-четыре параметра из конфига.

Andrew
21.01.2018
03:28:50
Ок, второй вариант: func (config *MyConfig) GetName() string { return config.Name} Я бы завёл под конфиг свой тип, и для него бы реализовал методы, возвращающие нужные поля.

Marlik
21.01.2018
03:30:58
В том то и дело, что поля у структуры одинаковые, строка. То есть не вижу смысла писать кучу методов.

Andrew
21.01.2018
03:31:48
В том то и дело, что поля у структуры одинаковые, строка. То есть не вижу смысла писать кучу методов.
Сори, но в Go не дженериков, поэтому копипаст и кодогенерация тут - "эта норма".

Хотя мне есть что предложить. Если конфиг без вложенностей, можешь через reflect доставать нужное поле: func (c Config) GetField(fieldName string) string() {}

Но никто это не одобрит ))

Marlik
21.01.2018
03:33:15
Да при чём тут дженерики? Мне просто нужна функция, одна, которая распарсит джейсон и вернёт запрашиваемую строку из файла.

Andrew
21.01.2018
03:34:34
Да при чём тут дженерики? Мне просто нужна функция, одна, которая распарсит джейсон и вернёт запрашиваемую строку из файла.
Зачем json? Когда ты должен один раз загрузить json в структуру и уже запросы делать по структуре?

Страница 760 из 1630