Anonymous
Ищите сразу на гитхабе
Anonymous
text language:go
Kirill
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
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 базы?
Dmitry
Мерль
Kirill
Выше не скроллится
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; для слабаков или оно даже с всем не хочет работать?
Anonymous
Oleg
Oleg
Горутина завершится сама, когда закончит работу. Ее не надо завершать как-то особенно.
Oleg
Закончится функция горутины - закончится горутина.
ros
@twentydraft
Andrey
спасибо за гуся тоже посмотрю
Dmitriy / დიმიტრი
Я совсем обленился, но может быть есть утилита которой я могу скормить список методов REST API, а она мне код на Go сгенерирует ?
Daniel
swagger
Daniel
go-swagger, если быть точным
Daniel
только список методов придется в специальном формате описать
Dmitriy / დიმიტრი
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
добрый день,как можно сконвертировать слайс байт в строку такой вариантst := string(s[:]) делает строку в 1024 символа
Daniel
[:] - лишнее
Alexei
Daniel
string(slice) делает строку
Daniel
не надо байтбуфера
Anonymous
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))
}
Daniel
значит, у вас слайс 1024 символа (не обязательно байта)
Anonymous
Мерль
Daniel
а что там в строке-то?
Anonymous
не тот принтф