
Sergey
21.05.2018
11:30:10
после него есть ещё несколько гайдов вроде

some_random_anonymous
21.05.2018
11:30:18

Nikita
21.05.2018
11:30:27
ну ланнсс

Sergey
21.05.2018
11:30:31
тут полезные ссылки https://tour.golang.org/concurrency/11

Google

Алексей
21.05.2018
11:48:39
как сделать из красной png в зеленый ??RGB?

Sergey
21.05.2018
11:49:37
ты можешь сделать маппиг из R в G


Aleksandr
21.05.2018
11:57:42
заморочился по передачи поинтерами vs значениями переменных
http://goinbigdata.com/golang-pass-by-pointer-vs-pass-by-value/
понятно, что с точки зрения логики если не нужно копирование и хочется чтобы функции/методы изменяли оригинал - поинтеры, нет - значения
еще думал что с точки зрения логики копирование значения переменной более ресурсоемко, нежели создание на нее нового поинтера.
и тут в статье написали что порой копирование новой переменной будет быстрее о_О.
Кто копался в этой области, подскажите есть смысл заморачиваться с поинтерами если мы используем ну например конструкцию типа
struct {
A int
B string
}?
А если просто var A int?
Можно конечно это все решить на этапе оптимизации, но хочется сразу толковый код писать (очевидно), чтобы меньше потом геммороится

Илья
21.05.2018
12:00:55
я бы сказал, 1) нет, 2) нет
если объект небольшой, то копировать его создавая копию на стеке дешевле, чем выносить его в кучу и передавать ссылку

Vasily Romanov
21.05.2018
12:02:37

Aleksandr
21.05.2018
12:05:21
если кто еще годной литературы или статейку по этому поводу подкинет буду премного благодарен, хочется уже расставить все точки над и)

Илья
21.05.2018
12:07:26

Aleksandr
21.05.2018
12:08:52
ну писать бенчмарк на каждый свой высер (или искусство) достаточно трудоемко, каждый раз писать не будешь, а если что-то не через поинтер передашь и заказчик потеряет пару тысяч уе бюджета на мощностях из-за этого такое себе))

Илья
21.05.2018
12:11:56

Google

Илья
21.05.2018
12:11:57
http://goinbigdata.com/golang-pass-by-pointer-vs-pass-by-value/
тк все зависит от контекста (флоу программы, в смысле сколько раз ты передаешь переменную между скоупами, размера структуры) нет какого-то рецепта

tsov
21.05.2018
12:30:47
нельзя просто так взять и кодить на Go

Антон
21.05.2018
12:31:22

Айбелив
21.05.2018
12:33:00
Есть мнение, что пока не поймёшь как работает его ассемблер, нельзя писать

tsov
21.05.2018
12:33:46

Антон
21.05.2018
12:33:46

some_random_anonymous
21.05.2018
12:34:45

Айбелив
21.05.2018
12:34:58

Антон
21.05.2018
12:49:26
Лол

Sergey
21.05.2018
12:52:04
найс аватарка

Mike
21.05.2018
12:55:24
Лол


Mykyta
21.05.2018
15:00:34
заморочился по передачи поинтерами vs значениями переменных
http://goinbigdata.com/golang-pass-by-pointer-vs-pass-by-value/
понятно, что с точки зрения логики если не нужно копирование и хочется чтобы функции/методы изменяли оригинал - поинтеры, нет - значения
еще думал что с точки зрения логики копирование значения переменной более ресурсоемко, нежели создание на нее нового поинтера.
и тут в статье написали что порой копирование новой переменной будет быстрее о_О.
Кто копался в этой области, подскажите есть смысл заморачиваться с поинтерами если мы используем ну например конструкцию типа
struct {
A int
B string
}?
А если просто var A int?
Можно конечно это все решить на этапе оптимизации, но хочется сразу толковый код писать (очевидно), чтобы меньше потом геммороится
Копирование указателя в го происходит быстрее, чем копирование структуры, т.к. указатель в го - это _структура_ которая копируется (вот так вот, да) и в которой хранится тип и адрес уже непосредственно данных в памяти. А вот обращение к данным по ссылке конечно медленее - цена за разыменовывание. В го ГЦ работает не так, как в дотнете или жаве. В дотнете, объекты ГЦ маркируются тремя генерациями, всякие локальные переменные и мелкая требуха попадает в первую генерацию и чиститься первее всех. В го же оптимизация происходит на этапе компиляция, которая называется Escape Analysis, суть в которой, что многие объекты выделяются не на куче, а на стеке и сразу уничтожаются, что обнаруживается семантическим анализом их использования компилятором.
Передавать по ссылке версус Передавать по значению
Преждевременная оптимизация зло, потому ориентироваться на недокументированные оптимизации компилятора и гадание выделится ли структура на стеке или в куче не имеет смысла.
Я выработал концептуально такую систему:
1. Передавать структуру по значению, если мы предполагаем ее использование как иммутабельную (но тут не забывайте, что мапы и слайсы все равно будут мутабельны)
2. Передача ссылки предполагая, что объект будет изменяться функцией, в которую мы ее передаем
3. Понимать указатель как nilable (nullable) значение, чтобы проверить, мол не проинициализировано ли значение
4. Использовать указатели когда надо избежать копирования
В общем, как-то так


Jentry
21.05.2018
15:08:57
Если указатель на структуру неоптимально, тогда почему методы в го реализованы через передачу указателя на структуру? Даже когда мутабельность не требуется

Mykyta
21.05.2018
15:13:35

tsov
21.05.2018
15:16:40
в интерфейсы подходят только ссылки на объекты
по значению можно передавать мелкие структуры

Sergey
21.05.2018
15:18:46
мы точно про го говорим?

Vladislav
21.05.2018
15:18:47

Jentry
21.05.2018
15:19:10

Google

Jentry
21.05.2018
15:21:59
вот пример https://stackoverflow.com/questions/1658294/whats-the-purpose-of-the-lea-instruction

Mykyta
21.05.2018
15:23:04
А какие проблемы тут можно огрести?
Есть интерфейс
type Property interface {
Get() (value sometype)
Set(value sometype)
}
Метод Get() (value sometype) ты можешь имплементировать по значению (типа как бы подразумевая иммутабельность)
А Set(value sometype) по ссылке
Но в итоге если ты передаешь по ссылке, то ты все равно не сможешь его использовать как Property, т.к. Get будет определен по значению, а если по значению, то не сможешь из-за Set

Vladislav
21.05.2018
15:23:32
Или я неправильно понял?

tsov
21.05.2018
15:24:13

Mykyta
21.05.2018
15:26:17

Jentry
21.05.2018
15:26:26
у вас уже есть эмприческое правило на глаз как передавать структуру?
почему бы всегда не передавать по указателю и не заниматься преждевременными оптимизациями?

Vladislav
21.05.2018
15:27:10

Mykyta
21.05.2018
15:28:19

Vladislav
21.05.2018
15:28:35

Mykyta
21.05.2018
15:29:11
По ссылке можно.
нельзя, Get определен по-значению, смотри внимательно мой пример

Jentry
21.05.2018
15:29:18
если бы я читал код одного пакета, где 50/50% передача по указателю и по значению я бы подумал, что аффтар мудак, или я не прав?

tsov
21.05.2018
15:29:23
interface = struct{*itab, unsafe.Pointer}
в интерфейсе всегда ссылка (явно и неявно)

Vladislav
21.05.2018
15:29:45

Mykyta
21.05.2018
15:31:12

Vladislav
21.05.2018
15:36:34

Google

Sergey
21.05.2018
15:37:33
ребят, подскажите, как в go dep зафиксировать версию на определённом коммите?

Vladislav
21.05.2018
15:39:43

Sergey
21.05.2018
15:40:43

Vladislav
21.05.2018
15:42:02

Илья
21.05.2018
15:42:02
да

Sergey
21.05.2018
15:42:08
спасибо

Jentry
21.05.2018
15:45:43

Sergey
21.05.2018
15:46:17
это, к сожалению, не я решаю

Admin
ERROR: S client not available

Vladislav
21.05.2018
15:52:32
Кстати. Кто в курсе почему синтаксический сахар с вызовом метода определенного по указтелю с ресивером - структурой есть, а с передачей в интерфейс нет?
Пример: https://play.golang.org/p/TsFJD9wkeIq

Sergey
21.05.2018
15:56:59
как ты разыменуешь интерфейс?

Vladislav
21.05.2018
15:58:35

Sergey
21.05.2018
15:59:31
бл*, кто может вместо меня нормальными словами объяснить?

Илья
21.05.2018
16:00:22
не знаю, как объяснять, но нет, за вас p в &p компилятор не будет делать

Vladislav
21.05.2018
16:00:44
Я к тому, что вызвать метод, определенный по указателю если ресивер структура можно. А привести к интерфейсу нет.

Илья
21.05.2018
16:02:09
для метода компилятор сделает &p в момент вызова на истанциированом объекте

Vladislav
21.05.2018
16:02:56
Тогда почему нельзя сделать &p на присваивании к интерфейсу?

Google

Vladislav
21.05.2018
16:03:10
Слишком неочевидно?


Антон
21.05.2018
16:13:06
Копирование указателя в го происходит быстрее, чем копирование структуры, т.к. указатель в го - это _структура_ которая копируется (вот так вот, да) и в которой хранится тип и адрес уже непосредственно данных в памяти. А вот обращение к данным по ссылке конечно медленее - цена за разыменовывание. В го ГЦ работает не так, как в дотнете или жаве. В дотнете, объекты ГЦ маркируются тремя генерациями, всякие локальные переменные и мелкая требуха попадает в первую генерацию и чиститься первее всех. В го же оптимизация происходит на этапе компиляция, которая называется Escape Analysis, суть в которой, что многие объекты выделяются не на куче, а на стеке и сразу уничтожаются, что обнаруживается семантическим анализом их использования компилятором.
Передавать по ссылке версус Передавать по значению
Преждевременная оптимизация зло, потому ориентироваться на недокументированные оптимизации компилятора и гадание выделится ли структура на стеке или в куче не имеет смысла.
Я выработал концептуально такую систему:
1. Передавать структуру по значению, если мы предполагаем ее использование как иммутабельную (но тут не забывайте, что мапы и слайсы все равно будут мутабельны)
2. Передача ссылки предполагая, что объект будет изменяться функцией, в которую мы ее передаем
3. Понимать указатель как nilable (nullable) значение, чтобы проверить, мол не проинициализировано ли значение
4. Использовать указатели когда надо избежать копирования
В общем, как-то так
Эх, если бы только можно было явно указать, что значение иммутабельно передаётся по ссылке. Но это только мечты...


Artem
21.05.2018
16:14:30
ну если добавить &property{}, то оно скомпилируется, так как операция Set не определена для func (p property), а определена только на func (p *property), что по факту является разным поведением
то, что (p property) стоит отдельно не отменяет того, что это просто еще один аргумент функции

Vladislav
21.05.2018
16:17:02

Artem
21.05.2018
16:18:10
и объявив type A func(p property, v interface{}), функцию Get можно прятать за этим типом

Антон
21.05.2018
16:18:44

Nikita
21.05.2018
21:21:13
@rvasily ты мне гайд скинул, он на русском и от Мэйл разрабов
можно читать его ?
так, стоп
это твой туториал .............

Vasily Romanov
21.05.2018
21:21:36
это видео-курс

Nikita
21.05.2018
21:21:43
https://www.coursera.org/learn/golang-webservices-1

Vasily Romanov
21.05.2018
21:22:10
читать тоже можно, там есть конспекты лекций

Mr.
22.05.2018
02:49:46

Pawel
22.05.2018
05:23:04


Diasko
22.05.2018
05:30:04
День добрый, возникла проблемка. При отправки POST в теле Body получается набор символов вместо нормально ответа. Типо такого PFRLS1BHPjxSZXNwb25zZT48T3BlcmF0aW9uPkNyZWF0ZU9yZGVyPC9PcGVyYXRpb2
Если вызвать через curl -d "<TKKPG><Request>...</Request></TKKPG>" https://epaypost.xxx.com/Exec то нормальный ответ в xml приходот
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
22.05.2018
05:31:31
Похоже на base64 encoded

Diasko
22.05.2018
05:32:32