engelbart
это то да
engelbart
во! точно
Anonymous
точнее в надмапу
Alex
Guys, а тут про вакансии постить можно? Или лучше в какой-то специфичный чатик про который я не в курсе?
Daniel
https://t.me/golangjob
Alexander
как подставить в качестве аргумента функции результат, возвращённый другой функцией, если другая возвращает больше одного значения?
Alexander
Через промежуточные переменные.
вот гемор :( Все данные с формы загонять в переменные?
Alexander
Юзай struct
а в структуру тоже через переменные загонять?
Anonymous
а в структуру тоже через переменные загонять?
Заполняешь структуру своими данными формы и записываешь её в переменную. Затем подаёшь переменную на вход след. функции.
Kirill
https://pbs.twimg.com/media/B3Fvg-sCYAAkLSV.jpg тоже не очень
Daniel
это довольно старая картинка, на самом деле
Kirill
это довольно старая картинка, на самом деле
Но все успели забыть и поржали)
Alexander
пробежаться по структуре и выявить незаполненные поля - задача нетривиальная, как я понимаю?
Kirill
Более того, большая часть будет заполнена *zero ещё при аллокации
Alexander
где мой старый добрый !empty() ... 😞
Ilya
где мой старый добрый !empty() ... 😞
любишь обмазываться несвежим похапе?
Kirill
где мой старый добрый !empty() ... 😞
Там где empty(0.000000000001)// -> true
Alexander
ну кто то сюда пришёл с С и java, ктото с пхп
Aleksandr
где мой старый добрый !empty() ... 😞
не приджумывай проблем. empty имеет критерии пустоты. тебе нужно сформулировать их для своей структуры и написать несколько строк
Alexander
не всем тут рады?
Kirill
Я уже давно с пхп ушёл
Kirill
А с сей не ухожу, таки
Kirill
не всем тут рады?
Мы все тут тролли
Kirill
Ну - есть ещё немного HR'ов
Anonymous
Там где empty(0.000000000001)// -> true
Неа) так не работает.
Aleksandr
Мы все тут тролли
не "мы", не "тут", а "все" и "везде") в инетах
Kirill
Неа) так не работает.
Поздравляю с фиксом.
Ilya
а я на сях кодил в понедельник. после 15 лет их отсутствия в моей жизне.
Ilya
постгес в сях это пиздец.
Kirill
А ты говорил об этом Бартунову?
Ilya
когда строковый код ошибке получить надо как то через задний проход указав функции флажок
Ilya
да я про древнюю клиентскую либу
Kirill
Ты бы ещё нашёл самый первый коммит гошки и говорил бы - пиздец, язык не работает, нахера релизили вообще, ещё и коммит в восьмидесятых сделан, тогда же гита не было, идиоты
Ilya
а. еще в сях надо знать у какой говняшки делать деаллок, а какую эта клиентская либа заодно с резалтом подгребет
Ilya
фу
Мерль
пробежаться по структуре и выявить незаполненные поля - задача нетривиальная, как я понимаю?
Несколько подходов 1. Попробуй заменить структуру на функциональные параметры, если это возможно 2. Попробуй использовать указатели вместо значений внутри структуры
Kirill
Kirill
Alexander
func empty(v reflect.Value) bool { switch v.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return v.Int() == 0 case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: return v.Uint() == 0 case reflect.String: return v.String() == "" case reflect.Ptr, reflect.Slice, reflect.Map, reflect.Interface, reflect.Chan: return v.IsNil() case reflect.Bool: return !v.Bool() } return false }
Alexander
чёт никто не кидается гнилыми помидорами )
Илья
https://golang.org/pkg/reflect/#Zero
Илья
можно и с этой стороны зайти
⏺ Vаdim
Парни есть последовательность байт 12, 13, 23, 25 нужно сделать json {"0":12, "1": 13, "2": 23, "3": 25} сделал так пока: func ToBinJson(rc []byte) io.Reader { var buffStr string buff := bytes.NewBufferString(buffStr) buff.WriteString("{") for i := 0; i < len(rc); i++ { buff.Write([]byte("\"")) buff.WriteString(strconv.Itoa(i)) buff.Write([]byte("\"")) buff.Write([]byte(": ")) buff.WriteString(fmt.Sprintf("%v", rc[i])) if i < len(rc)-1 { buff.Write([]byte(", ")) } } buff.WriteString("}") return buff } можно ли лучше сделать?
Илья
"\"" чтобы так не писать можно использовать `, т.е. "`
Илья
лучше чего нужно сделать?
Илья
buff.Write([]byte("\"")) buff.Write([]byte(": ")) это можно в одну инструкция записать :)
⏺ Vаdim
ну это да, я из стринга собираю json - мне кажется это жесть же
Anton
конечно жесть..
Anton
проще в мапу а потом json.Marshal
Илья
если важна производительность, то твоё решение лучше всего :)
Илья
если лень писать такое, то map
Илья
отчегож
Aleksandr
шутите?? 😂
вообще все внутренности го сделаны максимально низкоуровнево, поэтому такой вариант вполне концептуально подходит) зачем обмазываться маршаллерами с рефлексией, если можно тупо строку склеить. тем более простой варианть
Илья
var buffStr string buff := bytes.NewBufferString(buffStr) - это вы таким образом хотите buff := bytes.Buffer{} создать?
Vasily
А зачем там строковой бкфер? МОжно прямо байтовый сразу
Мерль
вообще все внутренности го сделаны максимально низкоуровнево, поэтому такой вариант вполне концептуально подходит) зачем обмазываться маршаллерами с рефлексией, если можно тупо строку склеить. тем более простой варианть
Это экономия на спичках, причём эту штуку надо хорошенько протестировать, потому что именно в таких костылях больше всего неочевидной пакости прячется
Aleksandr
маршаллер писать для ланного случая сложнее
Vasily
Это не так выгодно по памяти
Aleksandr
Это не так выгодно по памяти
это правда. зато безошибочно
Anton
кто не ленивый? можете бенчмаркнуть? а то я с телефона :(
Vasily
Потому что будет и промежуточный слайс, и результат В вышеприведённом случае пишетя сразу в результат
Vasily
Если безошибочно - лучше json.Marshal
Мерль
я бы сделал чуть по другому - сформировал []string, потом strings.Join. Места для ошибок нет
Это только кажется В таких руками слепленных jsonах чаще всего и бывают плавающие баги, которые потом хер разберёшь Это прям каноничный пример "Как делать не надо"
Vasily
Если делать что-то руками - то хотя бы пользу по скорости иметь от этого
Aleksandr
https://play.golang.org/p/uzmX_o7K25
хотя да, это вариант лучше.
Мерль