
Daniel
25.08.2017
13:28:58
это не 100% так - числовые типы можно приводить. структуры - нет

Sergey
25.08.2017
13:29:36

LexsZero
25.08.2017
13:29:36
у него пустой интерфейс который изначально nil, он зовет унмаршал в него, там оказывается нетаддр

Sergey
25.08.2017
13:29:52
и вроде нет способа map[string]interface превратить без написания бойлерплейта в инстанс структуры

Google

LexsZero
25.08.2017
13:29:57
а он кстати точно nil перед унмаршалом?

Nikolay
25.08.2017
13:29:58

LexsZero
25.08.2017
13:30:04

Nikolay
25.08.2017
13:30:05

Sergey
25.08.2017
13:30:19

Мерлин
25.08.2017
13:30:43

Daniel
25.08.2017
13:31:56

LexsZero
25.08.2017
13:31:59
магически?
https://stackoverflow.com/questions/26744873/converting-map-to-struct/26746461#26746461 ну например

Nikolay
25.08.2017
13:32:28

Мерлин
25.08.2017
13:32:36

Nikolay
25.08.2017
13:32:46
а

Daniel
25.08.2017
13:33:01
оно не умеет импортить нестандартные пакеты, но это, вроде, не надо

Nikolay
25.08.2017
13:33:05
у меня данные из внешнего источника приходят

Google

Nikolay
25.08.2017
13:33:22
я хз, как смоделировать это в playground

Sergey
25.08.2017
13:33:44
заинлайнить?

Nikolay
25.08.2017
13:33:49
сейчас, кажется, немного начало получаться

Aleksandr
25.08.2017
13:35:13
оно не умеет импортить нестандартные пакеты, но это, вроде, не надо
он хочет сказать, что к нему приходит набор байтов без информации об исходной структуре. но го почему-то понимает что этот набор байтов конкретной структуры и не дает interface привести к другой.
Я с msgpack не работал, но логичный вывод, что все-таки в наборе байт кодируется в т.ч. информация о структуре

Daniel
25.08.2017
13:35:44
а, блин, msgpack!
playground отменяется :(

Nikolay
25.08.2017
13:36:15
все, я понял, в чем дело, ты прав
спасибо
там для каждого поля в формате задан code, и я определяю как раз в коде маппинг между кодами и своими кастомными структурами

Мерлин
25.08.2017
13:37:12

Daniel
25.08.2017
13:37:13
и тут мне стало интересно - что если на строне приемника соответствующего типа не будет?

Мерлин
25.08.2017
13:37:20

Daniel
25.08.2017
13:37:32
а?!

Nikolay
25.08.2017
13:37:33

Sparrow
25.08.2017
13:38:14

Мерлин
25.08.2017
13:38:23
а?!
Если на стороне приёмника не зарегестрировано это расширение, то либо анмаршаль в map либо падай

Nikolay
25.08.2017
13:47:07
десериализатор упадет, встретив нестандартный код

Google

Daniel
25.08.2017
13:54:32
ага

Kirill
25.08.2017
14:56:37
А кто-нибудь знает какой-нибудь пример зачем реально может понадобиться свежий type aliases из го 1.9?
type T1 = T2

Daniel
25.08.2017
14:57:39
чтобы чужому типу навесить методов

Aleksandr
25.08.2017
14:59:27

Daniel
25.08.2017
14:59:54
ага

Nikolay
25.08.2017
15:01:34

Daniel
25.08.2017
15:02:50
не
все еще строгая статическая

Nikolay
25.08.2017
15:05:27
но я же правильно понимаю, что можно типу поменять интерфейс так, чтобы в итоге он мог передаться туда, куда не надо, и вызвать безумные баги?

Daniel
25.08.2017
15:06:02
нет
методы появятся у нового типа, а не у старого

Aleksandr
25.08.2017
15:10:08
https://play.golang.org/p/mtS7m84gkY

Aleksandr
25.08.2017
15:10:32
над встроенными типами не работает https://play.golang.org/p/qyu0Yx7f-t

Alex
25.08.2017
15:15:20

Nikolay
25.08.2017
15:15:42
что-то не понятно чем type A string отличается от type A = string

Alex
25.08.2017
15:16:22
type A = string
ввели в 1.9 для облегчения рефакторинга, это не новый тип, а только alias для старого
Когда type A string создает новый тип

Aleksandr
25.08.2017
15:16:48

Nikolay
25.08.2017
15:18:36
то есть в первом случае нужно делать string(a), чтобы полкчить строку, а во втором можно просто писать a?

Alex
25.08.2017
15:19:43

Google

Oleksandr
25.08.2017
15:19:50
для алиаса можно ткнуть оригинальный тип, и оно прокатит, тогда как для newtype будет ошибка компиляции

Aleksandr
25.08.2017
15:20:18

Nikolay
25.08.2017
15:22:02
понял, всем спасибо)

Kirill
25.08.2017
15:25:37

Alex
25.08.2017
15:31:17

Nikolay
25.08.2017
15:42:36
ага
у меня тогда вопрос вдогонку. Вот, допустим, я пишу такой код:
var addr interface{}
addr, _ := d.DecodeInterface()
br.Client = addr.(Netaddr)
и вдруг оказывается, что ко мне внезапно пришел тип с другим интерфейсом из-за ошибки в данных
можно как-то проверить, что ко мне пришел тот самый тип?

Admin
ERROR: S client not available

Kirill
25.08.2017
16:07:48

Nikolay
25.08.2017
16:09:43

Alex
25.08.2017
16:15:01
Goby: A new Ruby-inspired language written in Go (Score: 104+)
Link: http://j.mp/2vnYIDw

Kirill
25.08.2017
16:25:25
ништяк, спасибо большое
Кстати если проверять только один тип, а не пачку, можно просто делать так
a,err := v.(string)

Nikolay
25.08.2017
16:26:20

Kirill
25.08.2017
16:26:36
ну тебе какой тип нужен?
Его и пишешь вместо стринга

Nikolay
25.08.2017
16:28:46
не работает
пишет, addr.(Netaddr) evaluated but not used

Kirill
25.08.2017
16:37:54
Я вообще не уверен как такая конструкция запустилась br.Server, err := addr.(Netaddr) := к полю стракта...

Google

Matwey
25.08.2017
16:58:35
Господа, а есть ли какой-нибудь простой способ из консоли получить URL GIT репозитория по заданному ImportPath?
Ну я имею ввиду, чтобы оно там разобралось с <meta ... > и возможными редиректами.

Nikolay
25.08.2017
16:59:59
тип и там и там задан

Kirill
25.08.2017
17:03:25
:= создать новую переменную
= присвоить готовой
поле br.Server уже есть, и заново его создавать внутри стракта... Так себе. + Такие конструкции просто не работают в го.

Nikolay
25.08.2017
17:05:25
я думал, := аллоцирует новые значения только для тех переменных слева, которые еще не инициализированы
остальные просто перезаписываются
это не так?

Kirill
25.08.2017
17:08:09
не совсем
func main() {
a:=1
fmt.Println(a)
{
a:=2
fmt.Println(a)
}
fmt.Println(a)
}
Например выдаст 1 2 1
Потому что в блоке создается новая а, которая исчезает после выхода из блока, а старая все еще не пропала

Nikolay
25.08.2017
19:17:47
ну, это нормально, это области видимости
я ж не про то, я про присваивание

Kirill
25.08.2017
19:18:52
Ну тип опять выделяется память

Nikolay
25.08.2017
19:19:38
погоди, то есть если у меня слева от := существующая переменная - то она будет перенесена в памяти в другое место? о_О
звучит, как треш

Roman
25.08.2017
19:20:42
Парни, никто случайно на go bootp сервер не писал? Или netboot не помню как правильно. Вобщем грузить системы по сети. Может библиотека есть или пример?

Kirill
25.08.2017
19:22:45

Kirill
25.08.2017
19:23:19