
Олег
07.03.2017
16:15:59
го собсно по дизайну собирает статически
динамическим может остаться только glibc, если не ошибаюсь
чтобы оно не валилось при переносе на целевую систему

Mikhail
07.03.2017
21:29:01
Привет. Может кто подсказать?
Собственно, хочу добавить метод changeSex для структры Human, чтобы менялось поле sex. Я так понимаю, мой код не работает из-за отсутсивия в go объекта this (и моих кривых рук)
https://play.golang.org/p/o94VvDbFdb

Google

Denis
07.03.2017
21:29:33
Поинтер
Забыли
func (h *Human)
Иначе он заменяет копию
Точнее в функцию ченджсекс попадает копия хюмана

Phil
07.03.2017
21:32:23

Mikhail
07.03.2017
21:33:56

corpix
07.03.2017
22:14:37

Roman
07.03.2017
22:16:33
В PHP

Pavel
07.03.2017
22:17:28
да this много где есть. В питоне, он называется self
как же еще можно сослаться на самого себя? )

corpix
07.03.2017
22:19:18
Ну это всё имена, в go просто это имя не захардкожено, выбор за разработчиком :)

Google

Phil
07.03.2017
22:19:55

Serge
07.03.2017
22:25:29
развлекаюсь звоночками;)
select {
case <-s.bell:
log.Print("Silenced the bell")
default:
log.Print("Bell is idle")
}
s.bell <- true
log.Print("Rang the bell")

Roman
07.03.2017
22:29:55

Phil
07.03.2017
22:33:57
go не нужно glibc
phil@phil-home:~$ ldd hello_world
linux-vdso.so.1 => (0x00007fffdc50c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb123aa7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb1236de000)
/lib64/ld-linux-x86-64.so.2 (0x000055ba7e32f000)

Mikhail
07.03.2017
22:36:32

wf
07.03.2017
22:36:35

Phil
07.03.2017
22:38:08
это подсказки. забудь пока.

Mikhail
07.03.2017
22:39:36
это подсказки. забудь пока.
Я их юзал просто, когда писал rss-reader. И тогда меня вполне удовлетворил ответ в духе: "это надо, чтобы всё работало". Но теперь как-то интересно стало

Phil
07.03.2017
22:44:14

Mikhail
07.03.2017
22:44:43

Phil
07.03.2017
22:45:40
грубо говоря, синтаксическая добавка, которая самим языком игнорируется, но чтото там в рефлексии

Denis
07.03.2017
22:51:12
Доп инфа для декодинга из одного формата данных в другой, для orm всяких

Phil
07.03.2017
22:51:32
Какие в жопу orm

Denis
07.03.2017
22:53:21
Конкретно здесь эти данные помогают распарсить xml
Есть еще json, sql и тд
Каждая либа свои теги юзает
Ну чё, с праздником

Google

Yura
08.03.2017
07:46:03
Без этого флага, gethostbyname берется из libc через CGo, и потому тянет всю остальную машинерию для CGo.

Phil
08.03.2017
08:02:32
хм...
но у меня нет cgo

Yura
08.03.2017
08:10:20
Почему люди не читают то, что написано?
Повторяю: без тага netgo, функция gethostbyname берется из libc с использованием cgo.
С тагом netgo используется реализация на Go.

Subbotin
08.03.2017
08:11:43
Это точно не уствревшие на 3 версии данные?

Yura
08.03.2017
08:13:41
Нет. Это актуальные данные.
Проблема в том, что gethostbyname кроме dns может использовать плагины (а-ля pam).
Если в организации настроена "секьюрность" через такие плагины, то будет неожиданностью, что программа на Go вдруг ничего не знает про это.
По тому поведение по умолчанию - использовать gethistbyname из libc.
Если же человек понимает, что в его компании такое извращение не практикуется, то он может собрать с -tag netgo
Вероятно, в Гугле это извращение практикуется :-)

Mikalai
08.03.2017
08:22:08
это практикуется во всех дистрибутивах линукса (ну ладно, за все не говорю) как минимум

Yura
08.03.2017
08:23:00
Как вариант, можно пересобрать стандартную библиотеку с -tag netgo. Т.е. этот таг нужен только для стандартной либы. Тогда бинари будут собираться без линковки с libc (если другая либа cgo не притянет).

Phil
08.03.2017
08:24:24

Yura
08.03.2017
08:26:29

Phil
08.03.2017
08:26:48
Но да, с -tags netgo собрал вообще без линков

Yura
08.03.2017
08:27:01

Phil
08.03.2017
08:27:19

Yura
08.03.2017
08:29:10
В стандартой поставке поддержка cgo включена. И, повторю в третий раз, функция резолвинга хостов без явно указанного тэга netgo использует gethostbyname из libc. Угадай, как она это делает? Правильно, с использованием CGo.

Google

Yura
08.03.2017
08:29:49
Тебе не нужно явно звать cgo, т.к. стандартная либа уже скомпилена.

Phil
08.03.2017
08:29:53
я хз как. я не сильно вчитывался в код го. я даже не знаю как они всё остальное делают

Yura
08.03.2017
08:30:34
Тогда зачем так споришь?

Phil
08.03.2017
08:31:30
да я не спорю, я вытаскиваю сведения :)
А кстати как сделано? Я код крайем глаза посмотрел - что-то я не нашёл где они эльфа вручную собирают. Или таки это просто я не нашёл?
Сисколлы делать - это ведь надо трап какой-то генерить...
А как на Go трап сгенерить?

Yura
08.03.2017
08:33:41
В смысле? На ассемблере, точно так же, как gcc и прочие делают.
В runtime есть ассемблерные файлики

Admin
ERROR: S client not available

Yura
08.03.2017
08:34:18
В них реализация оберток для сисколов.

Phil
08.03.2017
08:37:22
хм... т.е. теоретически в go можно асм всталять недокументированно?

alex3rd
08.03.2017
08:39:53

Phil
08.03.2017
08:40:23

alex3rd
08.03.2017
08:40:23
http://lemire.me/blog/2016/12/21/performance-overhead-when-calling-assembly-from-go/

Phil
08.03.2017
08:44:47
Вот кстати, смотрю я пакадж syscall и чтото вижу фигу. А как они из пакета это делают?

Quet
08.03.2017
08:46:33
магией

Phil
08.03.2017
08:48:09
Воооот

Yura
08.03.2017
08:48:24
Смотри внимательнее.
Не внимательно смотришь.

Google

Quet
08.03.2017
08:49:22
Фил, а ты какую проблему решаешь вот ща? что надо сделать чтобы не тянуть libc тебе сказали..

Phil
08.03.2017
08:49:47
Исключительно научный интерес

Yura
08.03.2017
08:51:30

Phil
08.03.2017
08:54:36
Ну пока у меня предположение, что есть недокументированный runtime API

Yura
08.03.2017
08:57:44
Конечно, все, что с маленькой буквы, не экспортировано и не документировано. Мало того, есть //go:linkname для скрытого "проброса" функций из пакаджа в пакадж (в основном, из runtime в другие либы стандартной библиотеки) , а также прямое обращение в ассемблере к функции из другого пакаджа по имени.

Maxim
08.03.2017
09:08:18
https://twitter.com/sAbakumoff/status/839139933424074753

Dmitry
08.03.2017
09:09:36
скала - язык серьезный

Maxim
08.03.2017
09:09:59

Timur
08.03.2017
09:17:45
PHPшники и Джависты клоуны. Там у них цирк есть.

Denis
08.03.2017
09:18:07
Что значит радуга у перла
У меня есть осторожные предположения

Timur
08.03.2017
09:18:23

Dmitry
08.03.2017
09:21:00
а html единственные кто отказываются сознаться в багах

Denis
08.03.2017
09:30:24
Там браузер виноват

Roman
08.03.2017
10:23:00

Yura
08.03.2017
10:23:56
Ага. Библиотечного.

Roman
08.03.2017
10:26:59
Я видел вот этот патч. Люди поддерживают его для сборки go либы для андроида. Я почему-то насторожился
https://github.com/syncthing/syncthing-android/blob/master/patches/golang/all/dns.patch