Anonymous
Ищите сразу на гитхабе
Anonymous
text language:go
Kirill
text language:go
:[|||||||||]:
Anonymous
con, errcon := net.Listen("udp4", "localhost:7777") if errcon != nil { panic(errcon) }совершенно стандартный код,но он падает в рантайме panic: listen udp4 127.0.0.1:7777: address localhost:7777: unexpected address type goroutine 1 [running]: main.createsock(0x67dec3, 0x5, 0xc4201843f0, 0x23) /home/kino/gop/src/telebot/main.go:30 +0x90 main.netinit(0x67dec3, 0x5) /home/kino/gop/src/telebot/main.go:37 +0x39 main.main() /home/kino/gop/src/telebot/main.go:24 +0x15a exit status 2
Anonymous
ткните носом
Michael
не может найти локалхост?
Anonymous
не
Slava
а что показывает ifconfig?
Anonymous
не пойму но tcp работает
Michael
udp = upd4
Michael
и какая версия го
Anonymous
не может найти локалхост?
он его резолвит это видно в ошибке
Anonymous
udp = upd4
таже самое
Anonymous
и какая версия го
go version go version go1.8.3 linux/amd64
Mikalai
Гугл выдает net.ResolveUDPAddr
Michael
The network net must be a stream-oriented network: "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
Michael
ListenUDP is way to Go
Slava
зацените, мы запилили форму входа в слак чат на Go! http://slack.golang-ru.com/
Oleg
Верстали на большом мониторе, да? 😁
Slava
не влезает в 640 на 480?
Oleg
1366x768 :) Все влезает, просто оступы вертикальные такие, что приходится скроллить вниз, потому что форма наполовину уехала за границу страницы :)
Andrey
на чем вы пишете миграции для sql базы?
Kirill
Выше не скроллится
Slava
ну кто-то должен страдать
Anonymous
люди объясните нафига в этом коде канал
Anonymous
import ( "fmt" "net" "runtime" ) func listen(connection *net.UDPConn, quit chan struct{}) { buffer := make([]byte, 1024) n, remoteAddr, err := 0, new(net.UDPAddr), error(nil) for err == nil { n, remoteAddr, err = connection.ReadFromUDP(buffer) // you might copy out the contents of the packet here, to // `var r myapp.Request`, say, and `go handleRequest(r)` (or // send it down a channel) to free up the listening // goroutine. you do *need* to copy then, though, // because you've only made one buffer per listen(). fmt.Println("from", remoteAddr, "-", buffer[:n]) } fmt.Println("listener failed - ", err) quit <- struct{}{} } func main() { addr := net.UDPAddr{ Port: 12345, IP: net.IP{127, 0, 0, 1}, } connection, err := net.ListenUDP("udp", &addr) if err != nil { panic(err) } quit := make(chan struct{}) for i := 0; i < runtime.NumCPU(); i++ { go listen(connection, quit) } <-quit // hang until an error }
Anonymous
зачем
Oleg
Строка <-quit заблокируется, пока одна из горутин не пошлет в нее сигнал. Это случится, когда одна из них наткнется на ошибку. Канал здесь нужен, чтобы завершить процесс, когда одна из горутин упадет.
Anonymous
горотина умрет или сам процессс
Kirill
ну кто-то должен страдать
А display: flex; flex-direction: column; для слабаков или оно даже с всем не хочет работать?
Oleg
горотина умрет или сам процессс
Горутина завершится, получив ошибку от ReadFromUDP, и после нее завершится весь процесс.
Anonymous
Горутина завершится, получив ошибку от ReadFromUDP, и после нее завершится весь процесс.
а чтобы зовершить просто гоурутину,надо просто без канала?
Oleg
Горутина завершится сама, когда закончит работу. Ее не надо завершать как-то особенно.
Oleg
Закончится функция горутины - закончится горутина.
ros
@twentydraft
Konstantin
на чем вы пишете миграции для sql базы?
https://bitbucket.org/liamstask/goose мне гусь больше всех нравится
Andrey
спасибо за гуся тоже посмотрю
Dmitriy / დიმიტრი
Я совсем обленился, но может быть есть утилита которой я могу скормить список методов REST API, а она мне код на Go сгенерирует ?
Daniel
swagger
Daniel
go-swagger, если быть точным
Daniel
только список методов придется в специальном формате описать
Dmitriy / დიმიტრი
swagger
точно, спасибо
Alexey
https://goplay.space/#draw
Anatoly
Прикольный, но тормозной
Мерль
https://medium.com/@drgarcia1986/listen-grpc-and-http-requests-on-the-same-port-263c40cb45ff
Мерль
https://medium.com/production-ready/go-mental-models-and-side-effects-2ee60e638c5b
Мерль
https://github.com/tockins/realize/tree/v1.4.1
Мерль
All About The Go Compiler with David Chase David Chase joined the show for a technical Q & A on compilers and what makes Go's compiler different from the rest (and of course, other interesting Go projects and news) https://changelog.com/gotime/52
Anatoly
Парни, а можно как-то поменять формат даты в стандартном логере?
Daniel
а он там есть?!
Anonymous
я тоже удивился
Anonymous
но есть
Anonymous
а он там есть?!
Причём по дефолту
Anonymous
Парни, а можно как-то поменять формат даты в стандартном логере?
юзай сразу нормальный логгер с уровнями и трейсом для разных уровней например logrus это было норм решением, универсальным тестируемым, на века а если костыль то вот https://stackoverflow.com/a/36140590
Anatoly
юзай сразу нормальный логгер с уровнями и трейсом для разных уровней например logrus это было норм решением, универсальным тестируемым, на века а если костыль то вот https://stackoverflow.com/a/36140590
Юзай сразу нормальный логгер Юзай сразу нормальный роутер Юзай сразу нормальный редактор Юзай сразу нормальную ос Пиши сразу нормальный код Пиши сразу нормальные тесты Пиши сразу нормальные конфиги ПИШИ СРАЗУ НОРМАЛЬНО ЧО ТЫ КАК НУБ =)
Anonymous
добрый день,как можно сконвертировать слайс байт в строку такой вариантst := string(s[:]) делает строку в 1024 символа
Daniel
[:] - лишнее
Daniel
string(slice) делает строку
Daniel
не надо байтбуфера
Daniel
это другая задача
Anonymous
и это все стандартным кодом из гитхаба делается, надо только конфиг подсунуть
Daniel
но вот то, что у стандартного логгера нет уровней - это криминал, это сразу заставляет на logrus/structlog перебираться
Anonymous
это другая задача
по поводу “чисто вывода в консоль“ удобно делать разные уровни дебага и реально выводить в экран в зависимости от окружения. например при тестировании нагрузки можно сделать высокий уровень чтобы не завалило нафиг
Anatoly
Вот это не нормальные уровни? Info := log.New(f, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile) Info.Println("Info")
Daniel
где тут уровни?
Aleksandr
Парни, а можно как-то поменять формат даты в стандартном логере?
type logWriter struct { } func (writer *logWriter) Write(bytes []byte) (int, error) { return fmt.Fprint(os.Stdout, time.Now().UTC().Format(time.RFC3339)+" "+string(bytes)) } func setLog() { log.SetFlags(0) log.SetOutput(new(logWriter)) }
Anonymous
string(slice) делает строку
ваш вариант делает тоже в 1024,что вызовает панику в телеграмм боте
Daniel
значит, у вас слайс 1024 символа (не обязательно байта)
Anonymous
значит, у вас слайс 1024 символа (не обязательно байта)
так и есть,надо просто стрип сделать
Anonymous
bytes.TrimSpace
st := string(bytes.TrimSpace(s)) всё равно 1024
Daniel
а что там в строке-то?
Anonymous
не тот принтф