@proGO

Страница 1564 из 1674
m
13.07.2018
15:11:27
или просто чтение из канала.

а с select работает иначе: бежится сверху вниз и проверяется, из какого канала можно прочитать данные. Еслини из какого, то он начинает ждать, пока в один из каналов не придут данные.

если же есть default, то он не ждёт, а выполняет то, что написано в default

Александр
13.07.2018
15:13:35
а насколько часто?

Google
Александр
13.07.2018
15:13:42
насколько будет успевать внешний цикл?

Glavnii
13.07.2018
15:14:13
https://groups.google.com/forum/#!topic/golang-dev/a5PqQuBljF4

Возможно было

m
13.07.2018
15:14:52
Александр
13.07.2018
15:15:08
Возможно было
select оформлен в for

default будет выполняться получается как for? сколько успеет итераций

Александр
13.07.2018
15:19:26
for { select { ... default: fmt.Println("no activity") } }

скорость вывода no activity будет равно скорости цикла

иным словами он заспамит?

m
13.07.2018
15:19:53
давай пока забудем про for. есть только select . в нём 1 case слушающий канал. Вопрос к тебе: как отработает эта конструкция.

Google
m
13.07.2018
15:20:34
select { case: _ <- c: }

Александр
13.07.2018
15:21:02
ну и идеи он будет ждать там

пока что-то придет

m
13.07.2018
15:21:11
правильно

Второй вопрос. как отработает тут: select { case: _ <- c: default: }

Александр
13.07.2018
15:22:18
по хорошему он должен опять сесть на первом же case и ждать пока придут данные

канал же false не вернул ?

m
13.07.2018
15:22:29
не правильно.

другие варианты.

Zver
13.07.2018
15:22:42
сразу отработает

Александр
13.07.2018
15:23:12
я сказал "по хорошему"

если там в языке не сделали исключения для select

а они сделали

m
13.07.2018
15:23:36
Вопрос к @ruelephant , почему Zver прав?

Zver
13.07.2018
15:23:46
В секцию дефаульт попадет.

Без ожидания.

Александр
13.07.2018
15:24:06
потому что блин для select они подпихнули хак

если бы обработка там была "на общих основаниях"

оно бы никогдане выполнилось

потому что чтение из канала без данных - лок

Google
m
13.07.2018
15:24:47
это не хак. Это отличная возможность читать из канала, если там что-то есть и работать дальше, если ничего нет.

Александр
13.07.2018
15:24:59
это как раз хак

исключение из правил

как бы я понимаю как оно работает кэп

m
13.07.2018
15:25:36
Я уже понял, что просто поговорить хочется. ?

Александр
13.07.2018
15:25:50
да блин, мне было интересно как в ядре ?

оформлено это

вообще мы не с этого начали

Но постойте, Go же ещё поддерживает select с дефолтным поведением, и если канал заблокирован, как горутина сможет обработать default? Хороший вопрос, давайте быстро посмотрим на приватное API каналов. Когда вы запускаете следующий кусок кода: select { case <-ch: foo() default: bar() } Go запускает функцию со следующей сигнатурой: func chanrecv(t *chantype, c *hchan, ep unsafe.Pointer, block bool) chantype это тип канала (например, bool в случае make(chan bool)), hchan — указатель на структуру канала, ep — указатель на сегмент памяти, куда должны быть записаны данные из канала, и последний, но самый интересный для нас — это аргумент block. Если он установлен в false, то функция будет работать в неблокирующем режиме. В этом режиме горутина проверяет буфер и очередь, возвращает true и пишет данные в ep или возвращает false, если нет данных в буфере или нет отправителей в очереди. Проверки буфера и очереди реализованы как атомарные операции, и не требуют блокировки мьютекса. Также есть функция для записи данных в очередь с аналогичной сигнатурой. Мы разобрались как работают запись и чтение из канала, давайте теперь взглянём, что происходит при закрытии канала.

нашел вообщем ?

Zver
13.07.2018
15:29:29
Вообще там используется скорее всего что-то вроде trylock/

Александр
13.07.2018
15:29:39
нет не так, выше прочитай

вообщем это сахар над функцией

Daniel
13.07.2018
17:04:19
Рандомно, да

Ну и важно помнить, что чтение из закрытого канала всегда успешное

Alexey
13.07.2018
17:28:13
Сортировка? На каналах?
SleepSort на них можно сделать:)

Катерина
13.07.2018
17:39:08
Что подготовить к собесу на Го?)

Александр
13.07.2018
17:39:34
для программиста? O_o

Голова, хотя бы одна рука и работоспособное тело

Google
Vladislav
13.07.2018
17:40:03
stackoverflow.tgz

Alexey
13.07.2018
17:40:31
Что подготовить к собесу на Го?)
Сортировку пузырьком ж

Катерина
13.07.2018
17:41:06
Сортировку пузырьком ж
Уровень мидл фулстек

Alexey
13.07.2018
17:42:13
А почему фулстек, если го?

Ну а так - горутины, каналы, селекты, структуры данных, SQL.

crxfoz
13.07.2018
17:44:06
Вопросик по swagger'у, первый раз использую. Имеется следующая модель: definitions: Task: title: Task type: object properties: id: type: string status: type: string enum: ["done", "runned", "finished", "pending"] И есть роут в котором я создаю новый таск, который возвращает 201 и ID нового таска (других полей не нужно). Каким образом можно связать в сваггере, что возвращаемый ID относиться к Task? Или же будет нормальной практикой создать еще один definitions: TaskName, в нужном роуте возвращать его, а в Task указать ref на свойство?

crxfoz
13.07.2018
17:47:09
вопрос из категории спортивного интереса

m
13.07.2018
19:06:54
Человек
13.07.2018
20:17:03
Вопрос какой тип нужно использовать дабы избежать эту ошибку - sql: Scan error on column index 1: unsupported Scan, storing driver.Value type <nil> into type? Код: db.Exec("CREATE TABLE IF NOT EXISTS pdata (username varchar(255), password varchar(255))") db.Exec("INSERT INTO pdata (username, password) VALUES ('Oleg', 'Hunter998')") db.Exec("SELECT * FROM pdata") for rows.Next() { var id string var username string var password string err := rows.Scan(&id, &username, &password) if err != nil { fmt.Println(err) } fmt.Printf("User: %v\n", username) fmt.Printf("Password: %v\n", password) }

Alan
13.07.2018
20:18:25
m
13.07.2018
20:40:53
а ошибка видимо в том, что в этом самом пропущееном селекте выбирается столбец id, которого нет в таблице pdata.

Человек
13.07.2018
20:42:51
а ошибка видимо в том, что в этом самом пропущееном селекте выбирается столбец id, которого нет в таблице pdata.
Там есть ID, я даже онлайн БД тестировал и через phpMyADmin на 000webhosting всё верно отображается, но ошибка в самом коде и я палогаю что это тип данных

m
13.07.2018
20:45:39
или там число, что логично для id

Никита
13.07.2018
20:46:21
Есть особые типы, как NullString, NullInt64

Google
Никита
13.07.2018
20:46:25
Их надо использовать

m
13.07.2018
20:46:33
добавь у столбцу ID в таблитце свойство AUTOINCREMENT и там тогда всегда будут циферки писаться при вставке новой строчки.

Человек
13.07.2018
20:47:23
добавь у столбцу ID в таблитце свойство AUTOINCREMENT и там тогда всегда будут циферки писаться при вставке новой строчки.
Знаю, я использую postgres sql и там PRIMARY KEY идет. Сейчас попробую теорию на Null значение

m
13.07.2018
20:47:24
И код в примере конечно лучше полный и рабочий постить...

не знаю как в постгре. но праймари кеу - это признак уникальности и того, что индекс перавичный, а не того, что база сама туда будет придумывать и подставлять новые чиселки.

т.е. на одной строчке оно сработает и там будет NULL, а на второй -уже нет.

Человек
13.07.2018
20:50:04
Ааа, кажется что да, в постегре вроде SERIAL отвечает за AUTO_INCREMENT

m
13.07.2018
20:50:22
И как бы здорово столбец ID объявить с NOT NULL

Человек
13.07.2018
20:53:10
И как бы здорово столбец ID объявить с NOT NULL
Спасибо вам!!! NOT NULL спас меня))

Человек
13.07.2018
22:06:52
Как мне можно использовать fmt.Sprintf() как глобальную переменную? То есть у меня идет fmt.Sprintf() без значения, то есть оно должно быть как var s string не обозначая ничего и чтоб потом допустим в функции func1 мог использовать эту переменную пичкая аргументами, пример string: var s string func func1() { s = "hello" }

Evgeny
13.07.2018
22:38:34
не совсем понятно что ты хочешь fmt.Sprintf() - функция ты не можешь объявить ее как тип данных и сувать ей аргументы

Страница 1564 из 1674