
Kirill
15.08.2018
13:48:45
Это не призма

Вячеслав
15.08.2018
13:52:24
Привет!
Можете подсказать по локализации?

Google

Вячеслав
15.08.2018
13:52:52
i18n.MustLoadTranslationFile("en-us.all.json")
T, _ := i18n.Tfunc("en-US")
t, _ := template.ParseFiles("template/index.html", "template/header.html", "template/footer.html")
t.Funcs(map[string]interface{}{
"T": T,})
t.Execute(w, map[string]interface{}{"Title": "New cat"})
правильно ли я делаю?
в шаблоне <h1>{{T "home_button" .}}</h1> но вываливается ошибка в консоль runtime error: invalid memory address or nil pointer dereference
goroutine

Антон
15.08.2018
13:53:47
https://gobyexample.com/select
а чем вот этот пример принципиально отличается от моего?

Crypt
15.08.2018
13:56:17

Aleksandr
15.08.2018
13:57:36
2 поменяй на 3, закрой каналы, и будет всегда первый case выполняться

Илья
15.08.2018
13:57:48

Vadim
15.08.2018
13:59:26
Привет, я тут подумал. Думаю, надо сделать петицию против использования int.

Антон
15.08.2018
14:00:28

Lesha
15.08.2018
14:01:43

Vadim
15.08.2018
14:02:50
Ненавижу, то он int32, то он int64. А причин, почему он лучше int64 и int32 не вижу. Возможно, что то на уровне ассемблера.

Lesha
15.08.2018
14:03:28

Artem
15.08.2018
14:03:36

Google

Lesha
15.08.2018
14:03:50
боже(
нужно внимательнее читать комментарии. Увидел циферки 32 и такой запомнил

Vadim
15.08.2018
14:05:07
int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.

Илья
15.08.2018
14:07:32
в смысле языков

Artem
15.08.2018
14:08:24
да вроде он всегда тут был

Vadim
15.08.2018
14:08:48
вы к нам из каких краев?
На го больше года уже пишу. Просто достало, когда одна библиотека тебе присылает int64, а второй ты должен отослать int.
И нужно переводить типы. А best practice нет
Накипео

Илья
15.08.2018
14:10:05
эм, а если в int32 переводить, то лучше?

Vadim
15.08.2018
14:10:54
Мало либ, где int32 будет дефолтным интом

Илья
15.08.2018
14:12:00
либы есть и они разные, int/uint тоже отменить?

Artem
15.08.2018
14:12:05
да и вообще в 32 уже смысла мало, ток в плане оптимизаций

Vadim
15.08.2018
14:12:16
Если бы все использовали только int или только int64 было бы в разы проще.

Илья
15.08.2018
14:12:50
и с переводом uint<->int придется же опять типы приводить
это вы еще overflow/underflow не обрабатываете

Vadim
15.08.2018
14:15:30
unsigned integer вам вполне может быть нужен, когда вы хотите чтобы в переменной были только положительные значения. Я не понимаю смысл int и uint.

Google

Vadim
15.08.2018
14:16:05
Я задал конкретный вопрос, а вы мне троля пускаете

Crypt
15.08.2018
14:17:13
вот бест практис
пойдет?)

Vadim
15.08.2018
14:17:43
Ура
Против best practice не попру

Crypt
15.08.2018
14:18:19
в gotour откопал

Vadim
15.08.2018
14:20:58
Очень часто вижу либы, где int вообще не пахнет.

Crypt
15.08.2018
14:21:33

Алексей
15.08.2018
15:16:22
Добрый день, помогите у кого есть время! надо создать три дериктории а в третей файлик а в файле вывести текущее время, пробывал через фунцкию MkdirAll ! но видимо руки кривые((

Artem
15.08.2018
15:17:23

Алексей
15.08.2018
15:17:59

Artem
15.08.2018
15:18:16
и папки не создались?

Алексей
15.08.2018
15:18:38

Artem
15.08.2018
15:18:58
так нужно разрешить =)

Алексей
15.08.2018
15:19:28

Aleksandr
15.08.2018
15:22:35

Artem
15.08.2018
15:23:01

Aleksandr
15.08.2018
15:23:14
как дать пермишн папкам?
https://www.google.com/search?client=ubuntu&channel=fs&q=linux+how+change+permission&ie=utf-8&oe=utf-8

Алексей
15.08.2018
15:24:07

Google

Crypt
15.08.2018
15:25:51
спасибо
да это хрень, там в восьмеричном формате вторым аргументом к MkDirAll права задаются

Алексей
15.08.2018
15:27:25

Kirill
15.08.2018
15:30:41

Dk
15.08.2018
15:38:40
Играюсь тут на плейграунде тура и попал на непонятные вещи. Объясните, пожалуйста.
Там многопоточность начали объяснять, ну я решил поиграться, чтобы понять и вот.

Aleksandr
15.08.2018
15:40:18
горутина не успевает выполниться до завершения программы
для этого есть sync.WaitGroup

Artem
15.08.2018
15:41:01
или time.Sleep(time.Second)

Admin
ERROR: S client not available

Dk
15.08.2018
15:41:01

Crypt
15.08.2018
15:41:26

Dk
15.08.2018
15:41:33
Спасибо, всё понял

Dmitriy
15.08.2018
15:41:33

Dk
15.08.2018
15:41:50

Artem
15.08.2018
15:42:03
шах и мат

Dmitriy
15.08.2018
15:42:30
ого, на русском гоутур есть?
в любом случае уже не актуально мне)

Crypt
15.08.2018
15:43:00

Dk
15.08.2018
15:46:37
go-tour-ru-ru

Google

Kirill
15.08.2018
15:55:45
русский перевод готура?
тебе там могут написать, что из закрытого канала никогда ничего не прочитаешь
тоже будешь верить?

Dk
15.08.2018
15:56:33
Не понимаю, к чему это

Kirill
15.08.2018
15:58:21
к тому, что к терминам в русском готуре надо относиться не просто "с щепоткой соли", а с тонной недоверия

Artem
15.08.2018
15:59:21

Kirill
15.08.2018
16:00:58
прямо скажем, тут конкурентности как раз нет
тут параллельная многопоточность
но! там могут напереводить так, что потом ещё пожалеешь, что прошел тур

Artem
15.08.2018
16:03:06
https://github.com/kalimatas/go-tour-ru можно накатать issue, кому режет глаза

Kirill
15.08.2018
16:05:17
> 30 commits behind golang:master.

Alexey
15.08.2018
16:10:36
Всем привет! Я уже писал в чатик, но так и не нашел наиболее подходящего проекта. По этой причине пишу еще раз.
Есть предложение для разработчиков/начинающих стартаперов.
Я – senior product дизайнер по enterprise/SaaS/веб/мобилкам (ui/ux).
Сейчас нахожусь в активном поиске работы уже несколько месяцев, потому что мне постоянно то компания, то проекты, то оплата не подходит. Но я не могу не заниматься дизайном и простаивать. Я делаю или бесплатно или очень дорого. Поэтому предложение:
Готов бесплатно выделять +-8 часов в неделю на разработку вашего продукта, начиная от полного проектирования по бизнес-процессам/идеям и заканчивая hi-fi мокапами.
Вы разработчик, который хочет сделать проект для портфолио с крутым дизайном? Пишите мне. Вы стартапер, у которого нет бюджета на хороший дизайн? Пишите мне.
С вас какие-то гарантии, что проект будет в продакшене и отсутствие NDA.

Kirill
15.08.2018
16:15:12

Alexey
15.08.2018
16:15:51


Алексей
15.08.2018
17:30:06
Доброго времени сутокт.
Уважаемые знатоки подскажите пожалуйста в чем я ошибся...
Есть метод который запускает две goroutine, по окончании которых я хочу удалить объект из массива подобных объектов.
Но каждый метод является бесконечным циклом...
func (client *Client) Listen() {
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
client.listenWrite()
}()
go func() {
defer wg.Done()
client.listenRead()
}()
wg.Wait()
fmt.Printf("Listen у клиента %d работу закончил", client.id)
AppServer.DelClient(client)
}
func (client *Client) listenWrite() {
for {
select {
case <-client.doneCh:
fmt.Println("BBBBBBBBBBBB")
client.doneCh <- true
fmt.Printf("listenWrite у клиента %d работу закончил", client.id)
return
}
}
}
func (client *Client) listenRead() {
for {
select {
case <-client.doneCh:
fmt.Println("AAAAAAAAAAAA")
client.doneCh <- true
fmt.Printf("listenRead у клиента %d работу закончил", client.id)
return
}
}
}
В определенный момент происходит запись в канал:
client.doneCh <- true
Но из всех принтов выводится только BBBBBBBBBBBB
И горутина не заканчивает работу...
если закомментировать client.doneCh <- true в горутинах то отрабатывает только listenWrite и вроде как завершается, тогда не понимаю как зыкрыть вторую горутину...
Единственное что приходит в голову это на каждую горутину создавать по своему каналу для закртия... но решение не очень нравится... может есть методика закрыть все горутины через один канал?


Andrei
15.08.2018
17:50:08
еще есть вариант использовать один shutdown канал, но ничего туда не слать, а закрывать его и в каждой горутине делать проверку в switch
_, ok := <- doneCh


Алексей
15.08.2018
18:01:28
идеологически правильно решение - каждой горутине по своему shutdown каналу, а код лучше кидать на плейграунд и в идеале, доводить его там до минимально работоспособного примера
Благодарю.. по поводу плейграунда понял, но как там описать свой код я не знаю... ниже попробую пояснить...
я уже модифицировал код и сделал два shutdown канала, но у меня не получается завершить listenRead
завершение должно происходить если происходит разрыв соединения склиентом по websocket
select {
case <-client.doneRead:
fmt.Println("AAAAAAAAAAAA")
// client.doneCh <- true
fmt.Printf("listenRead у клиента %d работу закончил \n", client.id)
return
default:
var msg IncomingMessage
err := websocket.JSON.Receive(client.ws, &msg)
if err == io.EOF {
client.doneRead <- true
client.doneWrite <- true
} else if err != nil {
fmt.Printf("Проблема чтения сообщения от клиента \n: %v", err)
// Если произошла ошибка соединения, допустим упал клиент, то убираем это соединение.
client.doneRead <- true
client.doneWrite <- true
} else {
AppServer.IncomingMessage(client, &msg)
}
}
подучается что я из горутины пишу в канал который должен её же и закрыть... и я не понимаю почему при записи в канала client.doneRead чтение из него после не происходит...
причем возникает ощущение что ничего не пишет ни в один канал...
может есть какое-то ограничение на запись в канал в горутину в которой из этого же канала что-то должно читаться???
но почему не происходит запись во второй канал? причем если их поменять местами то в client.doneWrite запись произойдет...


Andrei
15.08.2018
18:07:48
Благодарю.. по поводу плейграунда понял, но как там описать свой код я не знаю... ниже попробую пояснить...
я уже модифицировал код и сделал два shutdown канала, но у меня не получается завершить listenRead
завершение должно происходить если происходит разрыв соединения склиентом по websocket
select {
case <-client.doneRead:
fmt.Println("AAAAAAAAAAAA")
// client.doneCh <- true
fmt.Printf("listenRead у клиента %d работу закончил \n", client.id)
return
default:
var msg IncomingMessage
err := websocket.JSON.Receive(client.ws, &msg)
if err == io.EOF {
client.doneRead <- true
client.doneWrite <- true
} else if err != nil {
fmt.Printf("Проблема чтения сообщения от клиента \n: %v", err)
// Если произошла ошибка соединения, допустим упал клиент, то убираем это соединение.
client.doneRead <- true
client.doneWrite <- true
} else {
AppServer.IncomingMessage(client, &msg)
}
}
подучается что я из горутины пишу в канал который должен её же и закрыть... и я не понимаю почему при записи в канала client.doneRead чтение из него после не происходит...
Попробуйте отрефакторить так, что бы горутины не писали в тот же канал, из которого читают, скорее всего все проблемы растут из этогл


Алексей
15.08.2018
18:09:31

Andrei
15.08.2018
18:14:36