Size: a a a

2020 June 13

ВХ

Валентин Хомутенко... in Go-go!
sexst
Там вопрос буквально вставки во время компиляции одной инструкции для push onto stack и одной для release from stack. Это же не динамическое выделение памяти в heap во время выполнения.
Так что да, пренебрегайте и считайте околобесплатной штукой на фоне всего остального.
понял, спасибо )
источник

ЕК

Евгений Коновалов... in Go-go!
Доброго времени, у меня вопрос по парсину поля даты с html страницы в json-формате.
Отправляю через html страницу данные -
<td><input type="text" v-model="row.lastname" /></td>
<td><input type="date"  v-model="row.date1" /></td>     // это календарное поле, он передает год-месяц-день : 2020-06-01
<td><input type="date"  v-model="row.date2" /></td>
<td><input type="number" v-model="row.material" /></td>

потом от этой формы принимаю данные.
Есть структура -
type SearchBy struct {
              LastName string json:"lastname"
              Date1 time.Time json:"date1"
              Date2 time.Time json:"date2"
              Material int json:"material"
}
и хочу их прочесть -
body, err := ioutil.ReadAll(r.Body)
          if err != nil {
                         log.Fatal(err)
           }
searchdata := []SearchBy{}
const layoutISO = "2006-01-02"
json.Unmarshal(body, &searchdata)
fmt.Printf("test searchData %s", body)  // Тут все выводиться
fmt.Println("\nall of the data search", searchdata)

// в этом цикле я разными путями хочу прочесть поля date1 и date2, но пока ничего не помогает, в лучшем случае могу увидеть 0001-01-01 00:00:00 +0000 UTC или 0001-01-01 (применяя const layoutISO = "2006-01-02")
for i, v := range searchdata {
                       fmt.Println(i, v)
                       fmt.Println(v.Date1.Format(layoutISO))
                       fmt.Println("\t", v.Date1.Format(time.RFC3339))
}

Пробовал и разные библиотеки применять, дело в том, что когда в отдельном примере кода пишешь json строку в нужном виде, это работает, а при чтении с *http.Request тело запроса парсится, а при передаче в структуру выдает уже вот такой формат  0001-01-01 00:00:00 +0000 UTC
Есть предложения, как это сделать?
источник

с

сонная википедия... in Go-go!
сделать свой time-тип  с кастомным маршаллером
источник

с

сонная википедия... in Go-go!
type MyTime struct {
 time.Time
}

func (t *MyTime) UnmarshalJSON(b []byte) error {
                   //...
}
источник

с

сонная википедия... in Go-go!
второй вариант сделать Date1 и Date2 строками и парсить потом
источник

ЕК

Евгений Коновалов... in Go-go!
сонная википедия
сделать свой time-тип  с кастомным маршаллером
пробовал, результат такой же либо я что-то не понимаю, как приводить к нужному типу
источник

ЕК

Евгений Коновалов... in Go-go!
сонная википедия
второй вариант сделать Date1 и Date2 строками и парсить потом
если указать в структуре данные поля как строки, результата от передачи с тела запроса вообще не будет никакого
источник

@

@mr_tron in Go-go!
sexst
Всегда стоит объявлять переменные из соображений минимального и  достаточного scope. То есть в цикле.  Тем более что в данном примере переменные на стеке будут.
И да, плюсую за ответ выше
ну так если переменная на стэке то под неё и не будет каждый раз выделяться память. вот если ссылка на переменную убегает из цикла, то она и будет выделяться каждый раз, но на куче
источник

@

@mr_tron in Go-go!
тоесть оба варианта производят абсолютно одинаковое количество аллокаций памяти
источник

@

@mr_tron in Go-go!
Но второй гораздо лучше в плане багогенерации
источник

DP

Daniel Podolsky in Go-go!
@mr_tron
ну так если переменная на стэке то под неё и не будет каждый раз выделяться память. вот если ссылка на переменную убегает из цикла, то она и будет выделяться каждый раз, но на куче
как известно, под переменную цикла, как ее ни объявляй, память выделяется один ровно раз. есть пучок “багов”, с этим связанных
источник

AK

Andrey Kartashov in Go-go!
Daniel Podolsky
как известно, под переменную цикла, как ее ни объявляй, память выделяется один ровно раз. есть пучок “багов”, с этим связанных
Там речь об объявлении внутри цикла
источник

@

@mr_tron in Go-go!
Какая разница? Если переменная на стэке то место под неё выделяется ровно один раз - в момент входа в функцию. Даже если она это делает внутри for range по пустому массиву или внутри if в который мы не зашли.
источник

AK

Andrey Kartashov in Go-go!
@mr_tron
Какая разница? Если переменная на стэке то место под неё выделяется ровно один раз - в момент входа в функцию. Даже если она это делает внутри for range по пустому массиву или внутри if в который мы не зашли.
А если внутри for?
источник

AK

Andrey Kartashov in Go-go!
если переменная объявляется внутри for, то выделение памяти происходит каждый цикл
источник

VM

Vladislav Milenin in Go-go!
Andrey Kartashov
если переменная объявляется внутри for, то выделение памяти происходит каждый цикл
1 раз она объявляется
напишите бенчмарк и не гадайте
источник

@

@mr_tron in Go-go!
Andrey Kartashov
если переменная объявляется внутри for, то выделение памяти происходит каждый цикл
и где же именно эта память выделяется?
источник

I

Ivan in Go-go!
@mr_tron
и где же именно эта память выделяется?
Может на стэке, может на хипе, смотря как напишешь
источник

J

Jefferson in Go-go!
Всем привет. Подскажите, что не так с кодом?
https://pastebin.com/6FhKuGuj
wg.Wait() ждёт бесконечно почему-то
источник

J

Jefferson in Go-go!
exec.Command("./main").Start() - перезапускаюсь, чтобы обойти лимиты. Костыль, но по другому хз как реализовать
источник