@proGO

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

Sergey
25.08.2017
13:29:36
приведения конкретных типов в go нет. совсем нет
func Type1ToType2(t1 Type1) (Type2, error) {} только так же

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
Sergey
25.08.2017
13:30:19
рефлект
магически?

Мерлин
25.08.2017
13:30:43
это не 100% так - числовые типы можно приводить. структуры - нет
Если структуры абсолютно одинаково объявлены (за исключением тегов), то их тоже можно

Daniel
25.08.2017
13:31:56
это понятно, вопрос в другом же
а сделай playground, пожалуйста

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
а сделай playground, пожалуйста
это как? я пока не знаю таких вещей :)

Мерлин
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 отменяется :(

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

Daniel
25.08.2017
13:37:32
а?!

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
чтобы чужому типу навесить методов
type MyInt = int func(i MyInt) NewMethod() { } var myVar int = 5 myVar.NewMethod() так?

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
над встроенными типами не работает https://play.golang.org/p/qyu0Yx7f-t
Такое можно делать только с типами из того же пакета

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
что-то не понятно чем type A string отличается от type A = string
в первом случае новый тип на основе string, во втором случае алиас

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

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

Aleksandr
25.08.2017
15:20:18
то есть в первом случае нужно делать string(a), чтобы полкчить строку, а во втором можно просто писать a?
https://play.golang.org/p/mtS7m84gkY в первом случае NewMethod появится у MyNewString, а во втором у MyNewString и MyString, потому что это суть один тип

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

Kirill
25.08.2017
15:25:37
type A = string ввели в 1.9 для облегчения рефакторинга, это не новый тип, а только alias для старого
Но как именно это поможет рефакторингу? Даже никакого примера в голову не лезет. Разве что сократить какие-то старые очень длинные имена типов в новом коде.

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
Type switch https://tour.golang.org/methods/16 ?
ништяк, спасибо большое

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)

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
Я вообще не уверен как такая конструкция запустилась br.Server, err := addr.(Netaddr) := к полю стракта...
так почему бы нет? не вижу разницы между полем стракта и переменной

тип и там и там задан

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
погоди, то есть если у меня слева от := существующая переменная - то она будет перенесена в памяти в другое место? о_О
Тут вопрос в видимостях как я понимаю Например func main() { a := 1 a := 2 fmt.Println(a) }Тупо не скомпилится, поскольку no new variables on left side of :=

Страница 809 из 1674