Valentin
*[]T это хуерага
Мерль
@m0sth8 а ваш фреймворк не вышел ещё на гитхабе?
Anton
*[]T это хуерага
отлично. Мне товарищу так и передать?))) Думаю, он скжет что не аргументированно как-то
Илья
отлично. Мне товарищу так и передать?))) Думаю, он скжет что не аргументированно как-то
товарищу передай, что это не go way, Роб Пайк не для этого страдал!
Мерль
какой?
Вебфреймворк на кодогенерации
engelbart
Погодите погодите т.е. *[]T нах не надо?
engelbart
и []*T тоже?
Valentin
А нахуя?
Илья
[]*T это вагон г на хипе
Oleg
А нахуя?
полехче)
Anton
[]*T это вагон г на хипе
всегда так делал :D теперь не буду
engelbart
Я тоже делал
Anonymous
всегда так делал :D теперь не буду
Ну если T может быть nil, то почему бы не делать?
Anton
для []T и *[]T можно вернуть из функции nil
Илья
для []T и *[]T можно вернуть из функции nil
имеется ввиду, когда возвращается []T{nil}
Илья
т.е. слайс с nil вместо элемента
Илья
тогда *T осмысленно
Мерль
Кажется, сегодня будет #подкаст
Anton
так. еще из простых вопросов. Есть функция, которая должна пройтись по слайсу в режиме чтения и вернуть другой слайс. Сейчас это описано так func test(arr *[]Test) []Test . Нужен ли * ?
Valentin
нет
Anton
вернее написано func test(arr *[]Test) *[]Test, но тут уже сказали, что *[]Test на выходе - зашквар
Anonymous
Нет, обе звезды не требуются
Valentin
наконец я дома, настало время открывать IDE
Valentin
вроде уже идет, мне приходил какой то пуш из слака
Anonymous
наконец я дома, настало время открывать IDE
Открыл свою IDE, и сразу дома стало уютно :)
Anton
если передаем слайс в режиме "почитать", то он все равно передастся по ссылке и можно без *. Копирования элементиков в функцию не будет. Пральн?
John
Ребята, не подскажете, каким образом проще всего получать вывод из tcpdump в golang? пытался сделать таким способом...
John
package main import ( "bufio" "log" "os/exec" ) func main() { cmd := exec.Command("tcpdump", "-l -ilo -nXs0 udp and port 4729") stdout, err := cmd.StdoutPipe() if err != nil { panic(err) } if err := cmd.Start(); err != nil { panic(err) } in := bufio.NewScanner(stdout) for in.Scan() { log.Printf(in.Text()) } if err := in.Err(); err != nil { log.Printf("error: %s", err) } }
John
но программа завершается без единой строчки вывода
John
в чем я могу ошибаться?
Мерль
Vladimir
Подарите своему коту банку, чего же он такой обделенный
Так я хотел спросить, это твой кот или нет на аватврке?
Oleg
Так я хотел спросить, это твой кот или нет на аватврке?
Нет, просто случайная картинка из интернетов :)
John
cmd.Wait()?
если я не ошибаюсь, то это приведет к тому, что программа будет ждать окончания завершения вывода?
John
или как аз наоборот?
Valentin
Так открой ее код :)
Anton
За простые вопросики извиняйте, изучаю го по gobyexample, а там ничего путного не пишут
Максим
но программа завершается без единой строчки вывода
Можно еще через reader := bufio.NewReader(os.Stdin) и в цикле text, _ := reader.ReadString('\n') и передавать вывод таким образом /usr/local/bin/sflowtool -p 6556 -l | ./sflowLogger
John
тоже молчит, уже пробовал
John
а в каком месте лучше поставить cmd.Wait()?
Anton
А просто cmd.Output() работает? 🤔
John
просто уже голова плавится от этой херни
Максим
а в каком месте лучше поставить cmd.Wait()?
Wait waits for the command to exit. It must have been started by Start. - так программа заснет на этой строке и все
John
ну так вот
Максим
А как заснуть но не более 12 секунд?
в горутине запустить и слип 12сек в main(). но это плохой вариант
engelbart
не, у меня не тока это задача
engelbart
у меня main там норм работает
engelbart
но вот хочу cmd команду с ограничением по времени
engelbart
я знаю у http есть context
engelbart
а тут?
Igor
select по каналам + timer
Slava
у cmd тоже есть контекст
Slava
https://golang.org/pkg/os/exec/#CommandContext
engelbart
Ох
Anton
новая порция базовых вопросов. Почему тру го вэй возвращать *Т заместо Т? И почему зашкварно возвращать *[]T заместо []Т?
nikita
Ну массив это и так указатель
nikita
А указать на структуру меньше занимает памяти, потом проще дальше передавать, без аллокаций
Quet
да никакое это не тру всегда возвращать указатель
Slava
*Type возвращется для того, чтобы иметь возможно возвращать null, [] и map[] сами по себе указатели и могут быть null
Евгений
новая порция базовых вопросов. Почему тру го вэй возвращать *Т заместо Т? И почему зашкварно возвращать *[]T заместо []Т?
Если я верно понимаю: *[]T - это указатель на слайс, который внутри себя указывает на массив Т, и итоге у вас указатель на указатель. Чрезмерно сложная структура. []T - это слайс, который внутри себя указывает на массив T. Логично и удобно, быстро передается в виде одного короткого указателя. Другое дело, если вы хотели вернуть *[...]T (к соалению, именно так вернуть не получится - нужно явно указать длину массива) - указатель на массив Т. Оно как бы логично, и указатель всего 1. Но проблема в том, что указатель на массив - это такой слайс на педальном приводе. Работать с массивом менее удобно, чем со слайсом, например, у массива фиксированая длина. То есть [2]T и [3]T - это уже разные типы. Нужно будет их как-то приводить, учитывать длину и прочее. [...]T - это куча копирований и опять все неудобства массива.
Anton
ну в принципе я понял что к чему. спасибо всем
Anton
если нужно передать слайс структур в функцию, которая может некоторые поля структур менять, то лучше писать func test(arr *[]T) или func test(arr []*T) . Я склоняюсь ко 2 варианту, с 1ым слишком дурно получается.
Евгений
можно сразу func test(arr []T)]
Евгений
https://play.golang.org/p/BOHsN4E_qh
Vladimir
пока ты не собираешься расширять слайс
Евгений
лучше дае https://play.golang.org/p/aVPCB9Y9Wu https://play.golang.org/p/aVPCB9Y9Wu
Vladimir
@hellb0ys в Го слайс это структура, где есть len, capacity и указатель на данные
Vladimir
при передаче у тебя скопируется все 3 момента
Anton
можно сразу func test(arr []T)]
со структурками внутри слайса не прокатит
Vladimir
но так как на данные указатель - то ты при обращении к arr[0] будешь иметь доступ к реальными данными