Size: a a a

2020 June 07

AK

Artem Krapivin in Go-go!
тут не чат для того, чтобы кто-то сделал за вас тестовое задание :)
источник

RA

Rinat Almakhov in Go-go!
ADMIRAL
Необходимо написать функцию func Merge2Channels(f func(int) int, in1 <-chan int, in2 <- chan int, out chan<- int, n int) в package main.
Описание ее работы:
n раз сделать следующее

прочитать по одному числу из каждого из двух каналов in1 и in2, назовем их x1 и x2.
вычислить f(x1) + f(x2)
записать полученное значение в out
Функция Merge2Channels должна быть неблокирующей, сразу возвращая управление.
Функция f может работать долгое время, ожидая чего-либо или производя вычисления.

Формат ввода
Количество итераций передается через аргумент n.
Целые числа подаются через аргументы-каналы in1 и in2.
Функция для обработки чисел перед сложением передается через аргумент f.
Формат вывода
Канал для вывода результатов передается через аргумент out.
Ищи канал OZON contest 2020
источник

VS

Vyacheslav Sitnikov in Go-go!
Народ, подскажите, как преобразовать interface{} к кастомному типу:
type JsonUtcTime time.Time
Интерфейс (переменная col) содержит time.Time
При таком Type Assertion все работает
data := col.(time.Time)
А при таком нет, хотя, по сути, это алиас:
data := col.(JsonUtcTime)
Можно ли в go так вообще преобразовывать?
источник

VL

V L in Go-go!
Vyacheslav Sitnikov
Народ, подскажите, как преобразовать interface{} к кастомному типу:
type JsonUtcTime time.Time
Интерфейс (переменная col) содержит time.Time
При таком Type Assertion все работает
data := col.(time.Time)
А при таком нет, хотя, по сути, это алиас:
data := col.(JsonUtcTime)
Можно ли в go так вообще преобразовывать?
type JsonUtcTime time.Time
это не алиас, это определение типа, алиасы в го имеют другой синтаксис
источник

A

ADMIRAL in Go-go!
Rinat Almakhov
Ищи канал OZON contest 2020
Что за канал?
источник

RA

Rinat Almakhov in Go-go!
ADMIRAL
Что за канал?
источник

RA

Rinat Almakhov in Go-go!
Аа вообще уже все закончилось вроде
источник

VS

Vyacheslav Sitnikov in Go-go!
V L
type JsonUtcTime time.Time
это не алиас, это определение типа, алиасы в го имеют другой синтаксис
Возможно я не так выразился, я имел в виду, что по внутренней структуре данных они должны быть одинаковы
источник

VL

V L in Go-go!
Vyacheslav Sitnikov
Возможно я не так выразился, я имел в виду, что по внутренней структуре данных они должны быть одинаковы
Тем не менее это разные типы
источник

VS

Vyacheslav Sitnikov in Go-go!
V L
Тем не менее это разные типы
То есть преобразование одного типа в другой невозможна?
источник

VL

V L in Go-go!
преобразование (type conversion) - возможно, но у вас не преобразование, а type assertion
источник

VS

Vyacheslav Sitnikov in Go-go!
V L
преобразование (type conversion) - возможно, но у вас не преобразование, а type assertion
Да, я как раз хотел спросить, нет ли какого другого способа, если type assertion не работает :)
источник

VL

V L in Go-go!
В первую очередь стоит пересмотреть необходимость использования именно interface{}, возможно вам нужно что-то другое
источник

VL

V L in Go-go!
Rinat Almakhov
Ищи канал OZON contest 2020
Это задачи из обучалки озоновской гоферов?
источник

p

pragus in Go-go!
Vyacheslav Sitnikov
Да, я как раз хотел спросить, нет ли какого другого способа, если type assertion не работает :)
unsafe ;)
источник

RA

Rinat Almakhov in Go-go!
V L
Это задачи из обучалки озоновской гоферов?
Да
источник

I

Ivan in Go-go!
Vyacheslav Sitnikov
Да, я как раз хотел спросить, нет ли какого другого способа, если type assertion не работает :)
data := JsonUtcTime(col.(time.Time))
источник

SS

Stanislav Sagan in Go-go!
источник

DP

Daniel Podolsky in Go-go!
Такъ победимъ
источник

VI

Vadim Inshakov in Go-go!
Вот тут есть забавный бенч, показывающий, что append'ы к слайсу требуют ноль аллокаций, а append'ы к слайсу указателей требуют на каждую операцию новую аллокацию:
https://medium.com/@philpearl/bad-go-slices-of-pointers-ed3c06b8bb41

почему обычный слайс не требует новых аллокаций? это как?
источник