@gogolang

Страница 362 из 1630
Vladimir
05.07.2017
17:35:54
Будет тот же результат

Mush
05.07.2017
17:37:54
func TestSomeTest(t *testing.T) { s := make([]int, 10) s[0] = 1 s[1] = 2 s[2] = 3 func(d []int){ d = append(d, 4) }(s) log.Println(s) } [1 2 3 0 0 0 0 0 0 0]

Мерлин
05.07.2017
17:37:59
есть аналогичная по функциональности append операция, которая не аллоцирует?
Если у тебя ёмкость слайса больше чем длина, то аллокации не происходит

Google
Valentin
05.07.2017
17:39:10
Блин я уже забыл про эти особенности

Mush
05.07.2017
17:39:15
Не ", 10", а "0, 10"
index out of range тогда

Олег
05.07.2017
17:39:17
Так не изменится же ничего. Как выводило 1, 2, 3, так и будет выводить

Valentin
05.07.2017
17:39:34
Действительно, если cap хватает аллокации не будет

Vladimir
05.07.2017
17:39:37
index out of range тогда
Так добавлять аппендом

Mikalai
05.07.2017
17:39:41
Илья
05.07.2017
17:40:18
index out of range тогда
вы, видимо, совсем плохо с slice разобрались, для вашего примера make([]int,3,10)

или все данные добавлять append

Mush
05.07.2017
17:41:12
вы, видимо, совсем плохо с slice разобрались, для вашего примера make([]int,3,10)
для обоих предложенных результатов s всё равно [1 2 3]

в логе

Valentin
05.07.2017
17:41:33
Покажи код

Google
Mush
05.07.2017
17:41:34
что так: func TestSomeTest(t *testing.T) { s := make([]int,3, 10) s[0] = 1 s[1] = 2 s[2] = 3 func(d []int){ d = append(d, 4) }(s) log.Println(s) }

Vladimir
05.07.2017
17:41:36
Олег
05.07.2017
17:41:50
Что и есть ожидаемо :)
Я вообще не понимаю, о чем речь :)

Mush
05.07.2017
17:42:06
что так: func TestSomeTest(t *testing.T) { s := make([]int, 0, 10) s = append(s, 1) s = append(s, 2) s = append(s, 3) func(d []int){ d = append(d, 4) }(s) log.Println(s) }

Что и есть ожидаемо :)
как же? ведь без реаллокации мы должны были поменять исходный слайс, как я понял и получить 1 2 3 4

Rail'
05.07.2017
17:42:51
парни, если я в функции main запускаю поток(go parser()), то каким образом сделать так, чтобы программа не отстанавливалась пока выполняется поток?

Vladimir
05.07.2017
17:43:00
При передаче его в функцию

Происходит копирование структуры слайса

Указателя на функцию

Капа и лен

Ты меняешь Len нового слайса

Олег
05.07.2017
17:43:39
как же? ведь без реаллокации мы должны были поменять исходный слайс, как я понял и получить 1 2 3 4
Аллокации не будет, но слайс вернётся новый. Просто он будет указывать не на 3 байта в памяти, а на 4.

Vladimir
05.07.2017
17:43:52
Но при этом первые три элемента ты можешь менять

И если ты залезешь внутрь старого слайса и поменяешь ему только Len на 4, то там тоже найдешь свой новый элемент

Vladimir
05.07.2017
17:45:15
Я вообще не понимаю, о чем речь :)
Кстати оффтоп, но у меня дома такой же кот как у тебя на аватврке, только без банки

Mush
05.07.2017
17:45:34
Но при этом первые три элемента ты можешь менять
это я знаю. разница с мапой, что с ней любые операции меняют изначальную мапу. а со слайсом это не так

Google
Vladimir
05.07.2017
17:45:59
Valentin
05.07.2017
17:46:58
Смысл спорить, обратимся у официальному источнику https://blog.golang.org/go-slices-usage-and-internals

Mush
05.07.2017
17:47:17
Уши растут от того что такое внутри есть слайс и мапа
это понятно, просто всё это сводится к тому, что если нужно редактировать слайс, его надо передавать по указателю, в общем случае

Олег
05.07.2017
17:48:14
Кстати оффтоп, но у меня дома такой же кот как у тебя на аватврке, только без банки
Подарите своему коту банку, чего же он такой обделенный

Valentin
05.07.2017
17:48:31
А не лучше вернуть слайс в return?

Mush
05.07.2017
17:48:57
ну или так

Anton
05.07.2017
17:51:16
короче, мапы можно передавать без *, если я туда в функции хочу напихать еще мульён значений ?

Mush
05.07.2017
17:52:25
у меня есть код, который римерно 32млн значений пихает в мапу и читает из нее на протяжении разлиичных вызовов в скрипте

Valentin
05.07.2017
17:52:27
*[]T это хуерага

Мерлин
05.07.2017
17:52:57
@m0sth8 а ваш фреймворк не вышел ещё на гитхабе?

Anton
05.07.2017
17:53:28
*[]T это хуерага
отлично. Мне товарищу так и передать?))) Думаю, он скжет что не аргументированно как-то

Valentin
05.07.2017
17:53:50
Google
Илья
05.07.2017
17:54:24
отлично. Мне товарищу так и передать?))) Думаю, он скжет что не аргументированно как-то
товарищу передай, что это не go way, Роб Пайк не для этого страдал!

Мерлин
05.07.2017
17:54:37
какой?
Вебфреймворк на кодогенерации

Олег
05.07.2017
17:54:40
Ivan
05.07.2017
17:54:56
Погодите погодите т.е. *[]T нах не надо?

и []*T тоже?

Valentin
05.07.2017
17:55:20
А нахуя?

Илья
05.07.2017
17:55:29
[]*T это вагон г на хипе

Олег
05.07.2017
17:55:36
А нахуя?
полехче)

Anton
05.07.2017
17:55:47
[]*T это вагон г на хипе
всегда так делал :D теперь не буду

Ivan
05.07.2017
17:57:09
Я тоже делал

Admin
ERROR: S client not available

Andrew
05.07.2017
17:57:19
всегда так делал :D теперь не буду
Ну если T может быть nil, то почему бы не делать?

Anton
05.07.2017
17:57:47
для []T и *[]T можно вернуть из функции nil

Илья
05.07.2017
17:59:15
для []T и *[]T можно вернуть из функции nil
имеется ввиду, когда возвращается []T{nil}

т.е. слайс с nil вместо элемента

тогда *T осмысленно

Мерлин
05.07.2017
18:01:18
Кажется, сегодня будет #подкаст

Anton
05.07.2017
18:06:28
так. еще из простых вопросов. Есть функция, которая должна пройтись по слайсу в режиме чтения и вернуть другой слайс. Сейчас это описано так func test(arr *[]Test) []Test . Нужен ли * ?

Valentin
05.07.2017
18:07:00
нет

Anton
05.07.2017
18:07:06
вернее написано func test(arr *[]Test) *[]Test, но тут уже сказали, что *[]Test на выходе - зашквар

Google
Andrew
05.07.2017
18:07:34
Нет, обе звезды не требуются

Valentin
05.07.2017
18:07:38
наконец я дома, настало время открывать IDE

Олег
05.07.2017
18:07:59
Valentin
05.07.2017
18:08:24
вроде уже идет, мне приходил какой то пуш из слака

Andrew
05.07.2017
18:08:47
наконец я дома, настало время открывать IDE
Открыл свою IDE, и сразу дома стало уютно :)

Anton
05.07.2017
18:09:13
если передаем слайс в режиме "почитать", то он все равно передастся по ссылке и можно без *. Копирования элементиков в функцию не будет. Пральн?

John
05.07.2017
18:09:50
Ребята, не подскажете, каким образом проще всего получать вывод из tcpdump в golang? пытался сделать таким способом...

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
05.07.2017
18:10:26
в чем я могу ошибаться?

Мерлин
05.07.2017
18:10:38
Vladimir
05.07.2017
18:11:02
Подарите своему коту банку, чего же он такой обделенный
Так я хотел спросить, это твой кот или нет на аватврке?

Олег
05.07.2017
18:11:25
Так я хотел спросить, это твой кот или нет на аватврке?
Нет, просто случайная картинка из интернетов :)

John
05.07.2017
18:11:41
cmd.Wait()?
если я не ошибаюсь, то это приведет к тому, что программа будет ждать окончания завершения вывода?

или как аз наоборот?

Valentin
05.07.2017
18:14:25
Так открой ее код :)

Anton
05.07.2017
18:15:42
За простые вопросики извиняйте, изучаю го по gobyexample, а там ничего путного не пишут

Максим
05.07.2017
18:16:56
но программа завершается без единой строчки вывода
Можно еще через reader := bufio.NewReader(os.Stdin) и в цикле text, _ := reader.ReadString('\n') и передавать вывод таким образом /usr/local/bin/sflowtool -p 6556 -l | ./sflowLogger

John
05.07.2017
18:17:45
тоже молчит, уже пробовал

а в каком месте лучше поставить cmd.Wait()?

Anton
05.07.2017
18:18:30
А просто cmd.Output() работает? ?

Страница 362 из 1630