А ВОТ ТЕПЕРЬ ПАБЛИК
а какой логгер можете посоветовать?
Stanislav
log, logrus
dev_sheep
https://github.com/op/go-logging/blob/master/README.md
dev_sheep
Топ тема
Мерль
Было бы здорово иметь какой-нибудь Common Logging Interface
Stanislav
он какбы есть (log)
Stanislav
но его как-бы нет)
Ilya
В go-kit есть неплохой логгер
Aleksandr
А зачем другой? Я понимаю, что тот же logrus дает возможность ставить хуки, а в остальном почему обычный log не годен?\
Мерль
Мерль
К тому же у него такое крутое название, я не могу не отметить это
Мерль
https://medium.com/@deckarep/paradigms-of-rust-for-the-go-developer-210f67cd6a29
Мерль
Great improvement to build/run #golang binaries in Windows containers + volumes got merged. https://github.com/golang/go/commit/53003621720ff39c4745a76f76847123c27b01ea
А ВОТ ТЕПЕРЬ ПАБЛИК
listen tcp 37.98.223.63:3010: bind: cannot assign requested address
Что не так то?
Oleg
Мерль
А ВОТ ТЕПЕРЬ ПАБЛИК
Запускаю локально указываю в ListenAndServer - 0.0.0.0:3010
коннектится клиент
Запускаю на VPS нет
Указываю ип впс, не запускается
listen tcp 37.98.223.63:3010: bind: cannot assign requested address
kyprizel
посмотрите IP на впске, возможно у нее самой нет реального адреса
Mikalai
Oleg
Может быть, порт закрыт фаерволом?
Mikalai
Там нет интерфейса с таким адресом скорее всего
kyprizel
надо посмотреть ifconfig, если там 37.98.223.63 то смотреть файрвол, если нет - искать как натится/балансируется
Mikalai
А ВОТ ТЕПЕРЬ ПАБЛИК
Все ок, я просто сервер перепутал, извините, их два и ип идентичны практически
А ВОТ ТЕПЕРЬ ПАБЛИК
я не заметил разницы, спасибо всем
Mikalai
Anonymous
Аминь ))
kyprizel
подскажите пожалуйста - какие подводные камни есть с кросс-компиляцией при использовании cgo?
один и тот же код - нормально компилится нативно, но при кросс-компиляции ругается на довольно безобидную конструкцию.
Пример:
На amd64 всё ok
go get github.com/flynn/u2f/u2fhid
При кросс-компиляции (arm-linux-gnueabihf-gcc есть)
export CROSS_COMPILE=arm-linux-gnueabihf-
export GOOS=linux
export GOARCH=arm
go get github.com/flynn/u2f/u2fhid
gopath/src/github.com/flynn/u2f/u2fhid/hid.go:52: undefined: hid.Devices
kyprizel
пакадж github.com/flynn/hid собран - и для amd64 и для arm
kyprizel
пробовал golang 1.6 и 1.8
Ivahaev
Разве с cgo вообще работает кросскомпилляция?
Ivahaev
Go скомпилится под другую платформу, а C?
kyprizel
для этого мы задаем кросс-комилятор
Kirill
kyprizel
разобрался
kyprizel
в u2fhid файл назывался hid.go, при кросс-комиляции затирает пакадж hid, пофиксилось переименованием в u2fhid.go
dukeBarman
kyprizel
🙈
не ожидаешь такого от разработчика :)))
dukeBarman
ога :)
Pavel
Можно задать очень глупый вопрос? Касается gogland
Anonymous
Anonymous
задавай
Pavel
Просто я стесняюсь. Когда код дебажится в gogland, то получается так, что пути до файлов "ломаются". Так как в коде явно указано, что файл лежит тут же, в папке с исполняемым файлом. Если бы дебаггер gogland мог компилировать файл не во временной папке своей, а в той, откуда берет запускаемый файл для компиляции, то этой проблемы бы не было. Единственное решение, которое я вижу - менять все ути на полные.
Pavel
файлы - ресурсы программы. конфиг файл, например.
Bald
Мерль
Всех с праздником! Немного хороших материалов:
1. [EN] Про преимущества []byte перед interface{}
https://lanreadelowo.com/blog/2017/05/02/type-safety-or-convenience/
2. [EN] Статья про создание современного веб-приложения на Go
https://grisha.org/blog/2017/04/27/simplistic-go-web-app/
3. [EN] Несколько полезных советов Go-разработчикам
http://blog.stablekernel.com/go-quickstart-helpful-tips-for-experienced-programmers
4. [EN] Пример разработки приложения с каналами и горутинами
https://www.thepolyglotdeveloper.com/2017/05/concurrent-golang-applications-goroutines-channels/
5. [EN] Отладчик Delve обновился до v1.0.0-rc.1
https://groups.google.com/forum/#!topic/golang-nuts/kE-ZDrJEGR4
Мерль
Разработчик высокопроизводительного сервера распределённых блокировок Taooka делится тонкостями разработки API клиентской библиотеки на Go.
http://taooka.com/blog/convenient-and-fast-api-on-golang/
Dmitriy / დიმიტრი
Привет. А может кто-то сказать что обозначает вот это объявление функции:
func foo(data <- chan struct{}) {
Dmitriy / დიმიტრი
Это типа мы при вызове функции сразу получаем данные в data из канала переданного в функцию?
Oleg
Это значит, что функция получает канал data, из которого она может только получать данные
Oleg
А отправлять не может
Oleg
Пробел какой-то неидиоматичный
Oleg
func foo(data <-chan struct{}) {
Oleg
Вот
Oleg
Ага :)
func foo(data chan<- struct{})
Dmitriy / დიმიტრი
👍 сразу не заметил в чем разница, спасибо
Dmitriy / დიმიტრი
Насколько это плохо для программы запускать для чтения данных постоянно горутину и убивать её каждый раз после того как чтение завершится?
Quet
а почему это должно быть плохо?
Dmitriy / დიმიტრი
Мне кажется, что нет ничего хорошего в том что бы создавать горутину и убивать ее много-много раз. Но я в этом не уверен
Dmitriy / დიმიტრი
Может это фрагментирует память или ещё что
Quet
фантазии какие-то )
Dmitriy / დიმიტრი
Почему?
Quet
ничего страшного нет в таком
Anonymous
утра всем
Mikhail
rows.Next()?
Mikhail
(не настоящий сварщик, просто предположил)
Anonymous
Всем привет! Подскажите, пожалуйста, как правильно распарсить такой yaml-файл:
---
- test1:
test1_k1: test1_val1
test1_k2: test1_val2
- test2:
test2_k1: test2_val1
test2_k2: test2_val2Как правильно описать структуру?
Aleksandr
type A struct {
B B
C C
}
ros
type AutoGenerated []struct {
Test1 struct {
Test1K1 string `yaml:"test1_k1"`
Test1K2 string `yaml:"test1_k2"`
} `yaml:"test1,omitempty"`
Test2 struct {
Test2K1 string `yaml:"test2_k1"`
Test2K2 string `yaml:"test2_k2"`
} `yaml:"test2,omitempty"`
}
Anonymous
Может не совсем точно описал задачу. Если заранее не известны значения test1 и test2? Известна только их структура. Т.е. например в другой раз придет такой yaml:
---
- test3:
k1: val1
k2: val2
- test4:
k1: val1
k2: val2
Aleksandr
Aleksandr
как можно описать структуру если ее нет?
Anonymous
Ясно, спасибо! Пошел писать свой Unmarshal )))
Aleksandr
Ясно, спасибо! Пошел писать свой Unmarshal )))
func (user *User) UnmarshalJSON(data []byte) error {
var raw map[string]interface{}
json.Unmarshal(data, &raw)
user.Email = raw["email"].(string)
user.Nickname = raw["nickname"].(string)
user.Hash = raw["hash"].(string)
rawData := raw["data"].(map[string]interface{})
if myLeagues, ok := rawData["myLeagues"]; ok {
for _, myLeaguesMap := range myLeagues.(map[string]interface{}) {
for key, _ := range myLeaguesMap.(map[string]interface{}) {
if key != "used" {
keyParts := strings.Split(key, "_")
sportId, _ := strconv.Atoi(keyParts[0])
countryId, _ := strconv.Atoi(keyParts[1])
user.Leagues = append(user.Leagues, &League{
Id: keyParts[2],
SportId: sportId,
CountryId: countryId,
})
}
}
}
}
if myGames, ok := rawData["mygames"]; ok {
for _, myGamesMap := range myGames.(map[string]interface{}) {
for key, _ := range myGamesMap.(map[string]interface{}) {
if key != "used" {
user.GamesIds = append(user.GamesIds, key)
}
}
}
}
return nil
}
типа такого
Aleksandr
ой, большой экран