Je
если бы я читал код одного пакета, где 50/50% передача по указателю и по значению я бы подумал, что аффтар мудак, или я не прав?
Roman
interface = struct{*itab, unsafe.Pointer}
Roman
в интерфейсе всегда ссылка (явно и неявно)
Vladislav
нельзя, Get определен по-значению, смотри внимательно мой пример
Ну посмотрите что компилятор говорит. Он только на 23 строчку ругается.
Vladislav
нельзя, Get определен по-значению, смотри внимательно мой пример
Просто оставляем ссылку и все ок. https://play.golang.org/p/dlm0EBee1DA
Nikita
Ну посмотрите что компилятор говорит. Он только на 23 строчку ругается.
Ну разыменовывает автоматически. Потому и лучше методы определять по ссылке
Vladislav
Ну разыменовывает автоматически. Потому и лучше методы определять по ссылке
Конечно он разыменовывает при вызове данного метода также. Плохо это или хорошо зависит от конкретног участка кода.
Cat
ребят, подскажите, как в go dep зафиксировать версию на определённом коммите?
Vladislav
ребят, подскажите, как в go dep зафиксировать версию на определённом коммите?
https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md#dependency-rules-constraint-and-override
Vladislav
Илья
да
Cat
спасибо
Cat
это, к сожалению, не я решаю
Vladislav
Кстати. Кто в курсе почему синтаксический сахар с вызовом метода определенного по указтелю с ресивером - структурой есть, а с передачей в интерфейс нет?
Vladislav
Пример: https://play.golang.org/p/TsFJD9wkeIq
Cat
как ты разыменуешь интерфейс?
Vladislav
как ты разыменуешь интерфейс?
При чем тут разыменование то?
Cat
бл*, кто может вместо меня нормальными словами объяснить?
Илья
не знаю, как объяснять, но нет, за вас p в &p компилятор не будет делать
Vladislav
Я к тому, что вызвать метод, определенный по указателю если ресивер структура можно. А привести к интерфейсу нет.
Vladislav
не знаю, как объяснять, но нет, за вас p в &p компилятор не будет делать
Тогда что происходит на строчке 24 моего примера?
Илья
для метода компилятор сделает &p в момент вызова на истанциированом объекте
Vladislav
Тогда почему нельзя сделать &p на присваивании к интерфейсу?
Vladislav
Слишком неочевидно?
Антон
Копирование указателя в го происходит быстрее, чем копирование структуры, т.к. указатель в го - это _структура_ которая копируется (вот так вот, да) и в которой хранится тип и адрес уже непосредственно данных в памяти. А вот обращение к данным по ссылке конечно медленее - цена за разыменовывание. В го ГЦ работает не так, как в дотнете или жаве. В дотнете, объекты ГЦ маркируются тремя генерациями, всякие локальные переменные и мелкая требуха попадает в первую генерацию и чиститься первее всех. В го же оптимизация происходит на этапе компиляция, которая называется Escape Analysis, суть в которой, что многие объекты выделяются не на куче, а на стеке и сразу уничтожаются, что обнаруживается семантическим анализом их использования компилятором. Передавать по ссылке версус Передавать по значению Преждевременная оптимизация зло, потому ориентироваться на недокументированные оптимизации компилятора и гадание выделится ли структура на стеке или в куче не имеет смысла. Я выработал концептуально такую систему: 1. Передавать структуру по значению, если мы предполагаем ее использование как иммутабельную (но тут не забывайте, что мапы и слайсы все равно будут мутабельны) 2. Передача ссылки предполагая, что объект будет изменяться функцией, в которую мы ее передаем 3. Понимать указатель как nilable (nullable) значение, чтобы проверить, мол не проинициализировано ли значение 4. Использовать указатели когда надо избежать копирования В общем, как-то так
Эх, если бы только можно было явно указать, что значение иммутабельно передаётся по ссылке. Но это только мечты...
Artem
ну если добавить &property{}, то оно скомпилируется, так как операция Set не определена для func (p property), а определена только на func (p *property), что по факту является разным поведением
Artem
то, что (p property) стоит отдельно не отменяет того, что это просто еще один аргумент функции
Artem
и объявив type A func(p property, v interface{}), функцию Get можно прятать за этим типом
Vasily
это видео-курс
Vasily
читать тоже можно, там есть конспекты лекций
Oleh
Distributed Computing with Go V.N. Nikhil Anurag 2018
Diasko
День добрый, возникла проблемка. При отправки POST в теле Body получается набор символов вместо нормально ответа. Типо такого PFRLS1BHPjxSZXNwb25zZT48T3BlcmF0aW9uPkNyZWF0ZU9yZGVyPC9PcGVyYXRpb2 Если вызвать через curl -d "<TKKPG><Request>...</Request></TKKPG>" https://epaypost.xxx.com/Exec то нормальный ответ в xml приходот
Diasko
tr := &http.Transport{ MaxIdleConns: 10, IdleConnTimeout: 30 * time.Second, DisableCompression: true, } client := &http.Client{Transport: tr} req, err := http.NewRequest( "POST", url, strings.NewReader(byteXml), ) req.Header.Add("Content-Type", "text/xml; charset=UTF-8") resp, err := client.Do(req) content, _ := ioutil.ReadAll(resp.Body)
Artem
Похоже на base64 encoded
Artem
Ну так размотай его, есть пакет encoding/base64
Diasko
Ну так размотай его, есть пакет encoding/base64
Да размонать не проблема, просто не могу понять почему такое повдение
Diasko
проверил через curl и wget везде в ответ приходит xml, а тут base64
Artem
Ну так курл наверное его уже прогоняет через base64
Stanislav
доброго времени суток, товарищи. Тут с CouchDB в связке с Go кто работал? Как она? Штабильна?
Diasko
Нашел в чем косяк, оказывется сам дурак 😂
Anonymous
Книга из серии Обо всё и ни о чём конкретно. Да и чел странный— на обложке "Про канкаренси и параллелизм", внутри— микросервисы. Про concurency лучше книги Catrin Cox нет. Если интересует именно канкаренси @Cybercommunist
Anonymous
А из серии Распределенных систем, если не суровую математику, а инженерные подходы, то мне очень понравилась https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
Pawel
доброго времени суток, товарищи. Тут с CouchDB в связке с Go кто работал? Как она? Штабильна?
сталкивался. Если коротко - это какое-то лицорука. Более костыльной БД я в своей практике не встречал.
Brother
Что думаете по поводу этой статьи (но в контексте Go)? https://medium.com/saveboost/how-i-chose-our-startup-stack-70ddd8e164b Какой вы бы стек выбрали для стартапа/пэт-проджекта?
Anonymous
вместо этого изучи структуры данных, алгоритмы и О-сложности
алгоритмы чего помимо сортировки и обхода дерева следует знать?
🏁Александр
лучше посмотреть как в ядре все это работает, в плане гоу
🏁Александр
часто вопросы про "как работаю гоурутины" "чем отличаеются от потоков"
🏁Александр
var i TestInterface var t *Test i = t и почему i не nil 🙂 Вчера подловили на этом
Anonymous
кстати, на собеседовании меня практичаески всегда спрашивают за сортировку массива. я там чё-то отвечаю и спрашиваю интервьюера - а вам это с какой целью? что, вас нустраивает та сортировка которая в языке есть и вы хотите её переписать? И, очевидно же что там сортировка написана не в тупую, как может изложить собеседуемый, а алгоритм усложнённый, дополненный. Понятно, что никто ответить не может.
Anonymous
часто вопросы про "как работаю гоурутины" "чем отличаеются от потоков"
угу, ну тут вроде ясно. Рутины - это то из чего потоки складываются. Goroutines are multiplexed onto multiple OS threads
🏁Александр
гоурутины это надстройка по управлению потоками
🏁Александр
можно так 🙂
🏁Александр
"система очередей к потокам"
Alexandr
https://habr.com/post/333654/ https://habr.com/post/141853/
Alexandr
вот две хорошие статьи на эту тему)
Alexandr
Всем привет! Подскажите как лучше организовать такую вещь: Есть данные которые должны переодически обновляться из редис. Эти данные используются в разных местах(только чтение) и обновляться будут через метод update. Ну как хранить эту структуру? переменную пакета? Сейчас я сделал так, https://play.golang.org/p/2h3Fuh8GsuG
Anonymous
var i TestInterface var t *Test i = t и почему i не nil 🙂 Вчера подловили на этом
Так этот код вооще не будет работать наверное? во-первых не заданы нигде типы TestInterface и Test Если их задать, то i = t не будет работать так как типы разные. да?
Anonymous
само собой, если задать var i Test var t *Test то i = t не будет работать потому что поинтер
Anonymous
но факт ещё в том что сами типы данных отличаются )
🏁Александр
https://play.golang.org/p/JYhQnhDW_pc
🏁Александр
вот вам
Alexandr
вот вам
тоже набросал уже) ну если вывести через println то будет nil
Anonymous
вот не понятно
🏁Александр
fmt.Printf("%t %t", i, t)
Alexandr
https://play.golang.org/p/PqeMXn3Wczp
Anonymous
если fmt.Println(i == nil) выдаёт false то почему fmt.Println(i) выдаёт nil
🏁Александр
что еще больше вас запутать 🙂
🏁Александр
https://play.golang.org/p/FDmWKi9bLqA