
Olzhas
26.04.2018
07:04:09
или расте
или плюсах

Andrew
26.04.2018
07:04:22

Olzhas
26.04.2018
07:04:30

Google

Andrew
26.04.2018
07:06:01

Maxim
26.04.2018
07:06:42
log.Fatal помог
2018/04/26 07:04:59 listen tcp: lookup = : no such host
удобная штука да
еще могу посоветовать сделать грейсфулшатдаун, у меня вот так сделано:
// starting web server
log.Println("Starting web server...")
Server := http.Server{Addr: ":80"}
go func() {
log.Fatal(Server.ListenAndServe())
}()
// graceful shutdown
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
<-signalChan
log.Println("Shutdown signal received, exiting...")
Server.Shutdown(context.Background())

Александр
26.04.2018
07:09:55
O_o
я конечно может и ночь не спал
но
func BenchmarkVar(b *testing.B) {
var testString string
for i := 0; i < b.N; i++ {
testString = testTwo()
}
}
func BenchmarkValue(b *testing.B) {
var testString string
for i := 0; i < b.N; i++ {
testString = test()
}
}
func test() string {
return "test"
}
func testTwo() string {
var testVar = "test"
return testVar
}
почему ругается то на testString declared and not used
O_o
просто o_O

Andrew
26.04.2018
07:12:58

Olzhas
26.04.2018
07:16:11

Александр
26.04.2018
07:16:28
ну я так побоялся что не выделит память вообще
ради оптимизации

Google

Olzhas
26.04.2018
07:16:52

Александр
26.04.2018
07:17:09
я не совсем понимаю почему мой пример не работает O_o
и ide ругается

Olzhas
26.04.2018
07:17:33
var testString string
func BenchmarkVar(b *testing.B) {
var r string
for i := 0; i < b.N; i++ {
r = testTwo()
}
testString = r
}
func BenchmarkValue(b *testing.B) {
var r string
for i := 0; i < b.N; i++ {
r = test()
}
testString = r
}

Александр
26.04.2018
07:18:31
может быть ты имел введу за тушкой
но я делаю и оно что-то вообще не показывает по памяти ничего
BenchmarkVar-4 2000000000 1.08 ns/op 0 B/op 0 allocs/op
BenchmarkValue-4 2000000000 1.08 ns/op 0 B/op 0 allocs/op

Olzhas
26.04.2018
07:22:45

Александр
26.04.2018
07:23:57
но меня больше волнует почему переменную нельзя объявнить в теле функции
это бред какой то
вот тут легко сделали - https://github.com/cornelk/go-benchmark/blob/master/parameter_test.go

Alexey
26.04.2018
07:24:36

Olzhas
26.04.2018
07:24:36
там же используется
а в твоих тестах нет

Alexey
26.04.2018
07:25:29

Александр
26.04.2018
07:25:36
func BenchmarkTestTwo(b *testing.B) {
var testString string
for i := 0; i < b.N; i++ {
testString = test()
}
}
а в смысле тест стринг нигде не вызывается?

Alexey
26.04.2018
07:26:09
Йеп

Google

Александр
26.04.2018
07:26:20
но бред же, приваиванием я уже "потрогал ее"

Alexey
26.04.2018
07:26:34
ты положил значение в память ,а потом его нигде не брал
Го считает, что это лишнияя операция
Потрогать - это вот так сделать в конце:
_ = testString

Александр
26.04.2018
07:27:39
да мистика

Alexey
26.04.2018
07:27:39
или testString = testString

Александр
26.04.2018
07:27:46
или все такие надо спать ночью O_o

Alexey
26.04.2018
07:27:47
где же мистика?
Он говорит, нафиг тебе переменную объявлять, если ты ей не пользуешься? только память тратить да процессорные такты

Александр
26.04.2018
07:28:30
на самом деле он бесит

Alexey
26.04.2018
07:28:36
Он думает, скорее всего программист ошибся, скорее всего он хотел потом это значение использовать и проебался

Александр
26.04.2018
07:28:43
иногда надо часть кода закоментарить побыстрому

Александр
26.04.2018
07:28:50
и там начинается
"ой импорты лишние" "ой переменная не используется"

Olzhas
26.04.2018
07:30:32

Alexey
26.04.2018
07:31:12
(не на то ответил, сорри)

Александр
26.04.2018
07:32:03
да причем тут поколениям
для отладки

Olzhas
26.04.2018
07:32:20

Google

Александр
26.04.2018
07:32:39
обычно пока проблему ищешь, быстро сохранения в бд комментаришь что быне клал туда ничего :)
но иногда такие "каскады" пустых переменных

Alexey
26.04.2018
07:32:50

Roman
26.04.2018
07:33:56
подскажите, почему не работает этот код
buf, _ := ioutil.ReadAll(request.Body)
readerPrint := ioutil.NopCloser(bytes.NewBuffer(buf))
reader := ioutil.NopCloser(bytes.NewBuffer(buf))
fmt.Println("Request body : ", readerPrint)
request.Body = reader

Admin
ERROR: S client not available

Alexey
26.04.2018
07:34:53
Алсо, вычитка из readerPrint прочитает всё из buf, и второму reader'у ничего не останется

Roman
26.04.2018
07:36:18

Alexey
26.04.2018
07:36:35
надо копировать buf целиком

Roman
26.04.2018
07:36:55

Alexey
26.04.2018
07:37:24

Roman
26.04.2018
07:37:49
если я убираю этот кусок и не трогаю боди, все работает
runtime error: invalid memory address or nil pointer dereference

Alexey
26.04.2018
07:38:59

Roman
26.04.2018
07:39:33

Alexey
26.04.2018
07:40:08
Добавьте проверку перед ней)
if request == nil {
log.Fatal("AAAA")
}

Google

Roman
26.04.2018
07:42:08
request.Body только. запрос приходит, но без body

Alexey
26.04.2018
07:42:52
nil . спасибо
ну и печатать попроще можно, не делать новый буфер, а просто
fmt.Printf("req: %s", string(buf))

Andrew
26.04.2018
07:44:10

Александр
26.04.2018
07:45:29
пишет вообще типо память не выделялась O_o

Roman
26.04.2018
07:49:17

Alexandr
26.04.2018
07:52:18
Читаю книгу "язык программирования GO" Кернигана, в 8 главе про горутины и чаны автор говорит что параметры программы необходимо передать через горутину что бы не было взаимоблокировки основной горутины(main) и вспомогательных. Можеть объяснить как тут может произойти взаимоблокировка если в чан добавлять не в го-подпрограмме https://github.com/adonovan/gopl.io/blob/master/ch8/crawl1/findlinks.go#L39

Mykyta
26.04.2018
08:27:37


Andrey
26.04.2018
08:38:56
скорее всего - расход будет идентичен
Написал тест. Интересные результаты получились. С return заниммает меньше памяти и бенчмарк быстрее при возврате uint32. При возврате int размер кода одинаковый в обоих вариантах. Свитч из 1,5тыс значений получился 30кб. Примерно 16 байт на один кейс. Кейс тупо принимает uint16 отдаёт uint32 или uint64 (во втором тесте). Ещё момент Я ожидал увеличение кода в два раза при переходе на uint64. Но его нет. Разница в 200байт. Или компилятор оптимизирует и всё переводит в uint32 или не оптимизирует и всё держит в uint64. надо смотреть ассемблерный листинг, но уже не буду. Я делаю вывод в пользу return ну и бездумно int, uint64 и int64 не использовтаь там где не надо.
Хотя наврное стоит в асемблере покопаться. Потому что это не порядок. Почему 8 байтные константы занимают столько же сколько и 4 байтные

Daniel
26.04.2018
08:43:51
Потому, что память выделяется блоками

Andrey
26.04.2018
08:44:13
а.. понял
может быть
Эот можно проверить если увеличить размер свитча раз в 100, чтоыб блочность на этом фоне не играла роли

Daniel
26.04.2018
09:03:09
например