Size: a a a

2020 June 13

@

@mr_tron in Go-go!
Ivan
https://play.golang.org/p/kD3BfYOyaU7
Может я неправильно интерпретирую результат такого кода?
У вас здесь указатель. Переменная утекает на кучу
источник

@

@mr_tron in Go-go!
Запустите компилятр с эскейп анализатором
источник

@

@mr_tron in Go-go!
go run -gcflags '-m -l'  /home/user/.config/JetBrains/GoLand2020.1/scratches/scratch_61.go
# command-line-arguments
../../../.config/JetBrains/GoLand2020.1/scratches/scratch_61.go:13:3: moved to heap: num
../../../.config/JetBrains/GoLand2020.1/scratches/scratch_61.go:14:14: foo ... argument does not escape
../../../.config/JetBrains/GoLand2020.1/scratches/scratch_61.go:14:15: &num escapes to heap
источник

I

Ivan in Go-go!
Ага, я был уверен, что не утекает, даже ишью есть https://github.com/golang/go/issues/19720
источник

MW

Mr. Wh🦠er in Go-go!
hi
источник

ET

Eduard Tkachuk in Go-go!
Hi man 👋
источник

VK

Viktor Kondratiuk in Go-go!
Jefferson
Сообщение Wait выводится в терминал, в горутине всё читается, отрабатывает. Когда достингнем лимита - должно вывестись сообщение Success, но оно не выводится, хотя лимита достигает
package main

import (
"fmt"
"os/exec"
"sync"
)

var targetsTotal, targetsComplete int

func Check(line string) {
fmt.Println("Check")
}

var wg sync.WaitGroup

func CheckingThread(ch chan string) {
wg.Add(1)
defer wg.Done()

for targetsComplete < targetsTotal {
 targetsComplete++
 Check(<-ch)
}
fmt.Println("Limit")
return
}

func main() {

targets := []string{"1", "2", "3", "4", "5"}
targetsTotal = len(targets)
if targetsTotal < 1 {
 exec.Command("./main").Start()
 return
}

ch := make(chan string, targetsTotal)
for _, target := range targets {
 ch <- target
}

for i := 0; i < 6; i++ {
 go CheckingThread(ch)
}

fmt.Println("Wait")
wg.Wait()
close(ch)

fmt.Println("Success")
exec.Command("./main").Start()
}
источник

VK

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

VK

Viktor Kondratiuk in Go-go!
и попробуй делать так
wg.Add(1)
 go CheckingThread(ch)
источник

V💊

Vladimir 💊 Voytenko... in Go-go!
народ, а сейчас обязательно называть локальную папку как github.com/username/projectName?
источник

͏

͏͏͏͏ in Go-go!
Vladimir 💊 Voytenko
народ, а сейчас обязательно называть локальную папку как github.com/username/projectName?
ооо мне тоже интересно как это решать
источник

S

Sergey in Go-go!
Нет
источник

S

Sergey in Go-go!
Если не в gopath создаёшь
источник

MW

Mr. Wh🦠er in Go-go!
в go когда конкурентные запрлсы делаешь семафоры не нужны?
источник

MW

Mr. Wh🦠er in Go-go!
типа мне нужно 100.000 запросов слелать
источник

MW

Mr. Wh🦠er in Go-go!
он их же все разом не начнет делать?
источник

RS

Roman Sharkov in Go-go!
Mr. Wh🦠er
в go когда конкурентные запрлсы делаешь семафоры не нужны?
если не хочешь чтоб тебя выкинули за DoS, то да
источник

s

sexst in Go-go!
@mr_tron
ну так если переменная на стэке то под неё и не будет каждый раз выделяться память. вот если ссылка на переменную убегает из цикла, то она и будет выделяться каждый раз, но на куче
Блин, да. Чот я два сообщения аж написал, поумничал про область видимости и аллокацию на стеке во время компиляции, а самое важное - единовременную аллокацию то забыл. Мерси за важную поправку.
Семь утра субботы было, чо)
источник

MW

Mr. Wh🦠er in Go-go!
а какой библиотекой запросы делать? не хочу парсить Content Type, определять кодировку и тд
источник

@

@mr_tron in Go-go!
Mr. Wh🦠er
он их же все разом не начнет делать?
Ну количество одновременно работающих горутин равно количеству ядер твоего процессора.
Но если ты просто в цикле запустить сто тыщ раз go makeMyRequest(url), то результат довольно непредсказуем. В плане он успеет отправить сотню запросов, потом начнёт получать ответы на них и паралельно стать новые, но медленнее. Короче херня. Правильно сделать канал для задач и столько воркеров сколько надо, которые будут последовательно канал разгребать
источник