Artem
да и вообще в 32 уже смысла мало, ток в плане оптимизаций
Vadim
Если бы все использовали только int или только int64 было бы в разы проще.
Илья
и с переводом uint<->int придется же опять типы приводить
Илья
это вы еще overflow/underflow не обрабатываете
Vadim
unsigned integer вам вполне может быть нужен, когда вы хотите чтобы в переменной были только положительные значения. Я не понимаю смысл int и uint.
Vadim
Я задал конкретный вопрос, а вы мне троля пускаете
Anonymous
Я задал конкретный вопрос, а вы мне троля пускаете
When you need an integer value you should use int unless you have a specific reason to use a sized or unsigned integer type.
Anonymous
вот бест практис
Anonymous
пойдет?)
Vadim
Ура
Vadim
Против best practice не попру
Anonymous
в gotour откопал
Vadim
Очень часто вижу либы, где int вообще не пахнет.
Алексей
Добрый день, помогите у кого есть время! надо создать три дериктории а в третей файлик а в файле вывести текущее время, пробывал через фунцкию MkdirAll ! но видимо руки кривые((
Алексей
MkDirAll создает папки в папках, а не несколько на одном уровне
мне надо создать файлик в третем уровне вложенности
Artem
и папки не создались?
Алексей
и папки не создались?
нет ошибка с пермишином
Artem
так нужно разрешить =)
Алексей
так нужно разрешить =)
так вот я и попросил у кого есть время!
Artem
вопрос будет?
как дать пермишн папкам?
Aleksandr
как дать пермишн папкам?
https://www.google.com/search?client=ubuntu&channel=fs&q=linux+how+change+permission&ie=utf-8&oe=utf-8
Anonymous
спасибо
да это хрень, там в восьмеричном формате вторым аргументом к MkDirAll права задаются
Алексей
да это хрень, там в восьмеричном формате вторым аргументом к MkDirAll права задаются
Та мне как новичку всеравно их ссылки не чего не говорят !я пишу спасибо чтобы просто слится)
Dk
Играюсь тут на плейграунде тура и попал на непонятные вещи. Объясните, пожалуйста.
Dk
Там многопоточность начали объяснять, ну я решил поиграться, чтобы понять и вот.
Dk
почему-то у меня world не выводится совсем. Хотя if не захватывает принт.
Aleksandr
горутина не успевает выполниться до завершения программы
Aleksandr
для этого есть sync.WaitGroup
Artem
или time.Sleep(time.Second)
Anonymous
для этого есть sync.WaitGroup
или канал можно еще читать
Dk
Спасибо, всё понял
Artem
шах и мат
Dmitrii
ого, на русском гоутур есть?
Dmitrii
в любом случае уже не актуально мне)
Anonymous
ого, на русском гоутур есть?
спустя пару лет запилили, может это украинский перевод, кстати
Dk
go-tour-ru-ru
Kirill
русский перевод готура?
Kirill
тебе там могут написать, что из закрытого канала никогда ничего не прочитаешь
Kirill
тоже будешь верить?
Dk
Не понимаю, к чему это
Kirill
к тому, что к терминам в русском готуре надо относиться не просто "с щепоткой соли", а с тонной недоверия
Artem
Не понимаю, к чему это
перевод некорректный и в данном случае это имеет значение
Kirill
Kirill
тут параллельная многопоточность
Kirill
но! там могут напереводить так, что потом ещё пожалеешь, что прошел тур
Artem
https://github.com/kalimatas/go-tour-ru можно накатать issue, кому режет глаза
Kirill
> 30 commits behind golang:master.
Anonymous
Всем привет! Я уже писал в чатик, но так и не нашел наиболее подходящего проекта. По этой причине пишу еще раз. Есть предложение для разработчиков/начинающих стартаперов. Я – senior product дизайнер по enterprise/SaaS/веб/мобилкам (ui/ux). Сейчас нахожусь в активном поиске работы уже несколько месяцев, потому что мне постоянно то компания, то проекты, то оплата не подходит. Но я не могу не заниматься дизайном и простаивать. Я делаю или бесплатно или очень дорого. Поэтому предложение: Готов бесплатно выделять +-8 часов в неделю на разработку вашего продукта, начиная от полного проектирования по бизнес-процессам/идеям и заканчивая hi-fi мокапами. Вы разработчик, который хочет сделать проект для портфолио с крутым дизайном? Пишите мне. Вы стартапер, у которого нет бюджета на хороший дизайн? Пишите мне. С вас какие-то гарантии, что проект будет в продакшене и отсутствие NDA.
Kirill
Всем привет! Я уже писал в чатик, но так и не нашел наиболее подходящего проекта. По этой причине пишу еще раз. Есть предложение для разработчиков/начинающих стартаперов. Я – senior product дизайнер по enterprise/SaaS/веб/мобилкам (ui/ux). Сейчас нахожусь в активном поиске работы уже несколько месяцев, потому что мне постоянно то компания, то проекты, то оплата не подходит. Но я не могу не заниматься дизайном и простаивать. Я делаю или бесплатно или очень дорого. Поэтому предложение: Готов бесплатно выделять +-8 часов в неделю на разработку вашего продукта, начиная от полного проектирования по бизнес-процессам/идеям и заканчивая hi-fi мокапами. Вы разработчик, который хочет сделать проект для портфолио с крутым дизайном? Пишите мне. Вы стартапер, у которого нет бюджета на хороший дизайн? Пишите мне. С вас какие-то гарантии, что проект будет в продакшене и отсутствие NDA.
жаль, что мой проект не заинтересовал %)
Алексей
Доброго времени сутокт. Уважаемые знатоки подскажите пожалуйста в чем я ошибся... Есть метод который запускает две 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 🦉
Доброго времени сутокт. Уважаемые знатоки подскажите пожалуйста в чем я ошибся... Есть метод который запускает две 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 и вроде как завершается, тогда не понимаю как зыкрыть вторую горутину... Единственное что приходит в голову это на каждую горутину создавать по своему каналу для закртия... но решение не очень нравится... может есть методика закрыть все горутины через один канал?
идеологически правильно решение - каждой горутине по своему shutdown каналу, а код лучше кидать на плейграунд и в идеале, доводить его там до минимально работоспособного примера
Andrei 🦉
еще есть вариант использовать один shutdown канал, но ничего туда не слать, а закрывать его и в каждой горутине делать проверку в switch _, ok := <- doneCh
Алексей
идеологически правильно решение - каждой горутине по своему 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 🦉
Благодарю.. по поводу плейграунда понял, но как там описать свой код я не знаю... ниже попробую пояснить... я уже модифицировал код и сделал два 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 чтение из него после не происходит...
Попробуйте отрефакторить так, что бы горутины не писали в тот же канал, из которого читают, скорее всего все проблемы растут из этогл
Алексей
Попробуйте отрефакторить так, что бы горутины не писали в тот же канал, из которого читают, скорее всего все проблемы растут из этогл
так оно работает... если я делаю: if err == io.EOF { client.doneWrite <- true return } else if err != nil { fmt.Printf("Проблема чтения сообщения от клиента \n: %v", err) // Если произошла ошибка соединения, допустим упал клиент, то убираем это соединение. client.doneWrite <- true return } else { AppServer.IncomingMessage(client, &msg) } то все отрабатывает отлично, но оооочень хотелось именть одну точку выхода из метода...
Алексей
зачем? код на го - это портянка копипасты вида if err != nil { return err } так что не вижу смысла с этим заморачиваться
у меня есть логика которая должна выпонится перед завершением метода, писать её в каждом месте где есть return - безумие... делать отдельный метод который бы вызывался перед return - на мой взгляд тоже не очень... но явно лучше... по этому и хотелось сделать так что эта логика была сконгцентрирована в одном месте при завершении...
Алексей
А defer?
Хмммм.... Можно... Про него я не подумал...
Kirill
А сегодняшний представитель Омска - лицо компании ООО "Капитан Очевидность" — @zelenin
Илья
Доброго времени сутокт. Уважаемые знатоки подскажите пожалуйста в чем я ошибся... Есть метод который запускает две 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 и вроде как завершается, тогда не понимаю как зыкрыть вторую горутину... Единственное что приходит в голову это на каждую горутину создавать по своему каналу для закртия... но решение не очень нравится... может есть методика закрыть все горутины через один канал?
Context with cancel, может подойти
саша
@nexmean всё что тебе надо знать про хаскиль
Забавно, немного unsound, хотя можно понять почему так.
Anonymous
всем привет! как в mgo.v2 искать слово по всей коллекции?
Denis
регуляркой или https://docs.mongodb.com/manual/core/index-text/
Alexander
Коллеги, что бы такого почитать о том, когда использовать ссылку на структуру, а когда структуру в методе? func (r *rect) area1() int { return r.width * r.height } func (r rect) area2() int { return r.width * r.height }
Alexander
@Am1rkin Спасибо!