
Daniel
03.07.2016
10:54:34
ну или связный список вместо слайса использовать, если это частая операция

Maksim
03.07.2016
10:57:45
Не проще было работать с map?

Daniel
03.07.2016
10:58:33
мап в случайном порядке элементы отдает

Maksim
03.07.2016
11:00:48
с числовым итератором это не проблема ведь, просто комнаты как по мне такая вещь с которой нужно проводить постоянно разные операции в том числе и удаления, что как-то экономить на этом не особо и смысл есть.

Google

Igor
03.07.2016
11:24:03

Oleksandr
04.07.2016
08:55:25
Есть тут люди, которые работали с sip ?

cptn_foxmk
04.07.2016
09:12:55
я только с ice, если это поможет)

Oleksandr
04.07.2016
09:54:40

Kirill
04.07.2016
09:57:07

[Anonymous]
04.07.2016
16:28:37
Всем привет. Есть двумерный массив [n][n]int как проверить что например [10,2] не выходит за пределы массива? Знаю что map возвращает вторым значением bool для этой проверки, а с массивами как быть?

Kirill
04.07.2016
16:30:23

[Anonymous]
04.07.2016
16:37:37
cap()?
как эта ф-ция поможет? можно пример?

Kirill
04.07.2016
16:52:01
можно. а почему не слайсы?
зачем нужны напрямую массивы?

[Anonymous]
04.07.2016
16:59:09

Kirill
04.07.2016
17:13:53
пусть будут слайсы s := make([][]int, 10*10) a := s[-3][500] как проверить перед присвоением?
package main
import (
"fmt"
)
func main() {
s := make([][]int, 10*10)
for i := 0; i < len(s); i++ {
s[i] = make([]int, 10*10)
}
k := 1
j := 99
res := isValidKey(k, s) && isValidKey(j, s[k])
if res {
a := s[k][j]
fmt.Printf("valid: %#+v", a)
} else {
fmt.Println("invalid")
}
}
func isValidKey(key int, slice interface{}) bool {
switch slice.(type) {
case [][]int:
return key >= 0 && len(slice.([][]int)) > key
case []int:
return key >= 0 && len(slice.([]int)) > key
}
return false
}

Google

[Anonymous]
04.07.2016
17:29:46

Kirill
04.07.2016
17:30:29
я не знаю, для чего ты хотел это использовать, так что ничего лучше предложить не могу

分解物質
04.07.2016
17:32:46

Vladimir
04.07.2016
20:42:38
Ребят, как в структурах инициализировать слайсы?
И нужно ли их там вообще инициализировать. Через make([]slice,site_slice)?

Kirill
04.07.2016
20:44:57

Vladimir
04.07.2016
20:45:58
Хорошо. Но таким же образом инициализировать слайс в структуре: make([]slice,site_slice)?

Kirill
04.07.2016
20:47:47
что-то вроде этого
func NewMyStruct() *MyStruct {
return &MyStruct{
mySlice: make([]string),
}
}

Vladimir
04.07.2016
20:48:29
Спасибо!

Kirill
04.07.2016
20:48:40
не за что :)

Vladimir
04.07.2016
21:08:42
Тут еще один вопрос подошел. Есть у меня листинг websocket-ов, мне нужно каждый сокет слушать одновременно, в зависимости от ответа проявлять какую либо реакцию, и снова продолжать слушать. Как быть?
nonblock socket не хотелось бы использовать, может есть альтернативные и подходящие для меня варианты?

Kirill
04.07.2016
21:09:58
слушай в соседних горутинах

Vladimir
04.07.2016
21:20:31
Извините, за то что уже достаточно много вопросов. Но тут проблема. У меня есть тип данных *Conn, и есть buffer типа []byte, я точно знаю что этот buffer и есть *Conn, и мне остается просто преобразовать тип в *Conn. Но когда пытаешься делать (*Conn)buffer или же buffer.(*Conn), то пишет ошибку: Invalid type assertion: buffer.(*Conn), (non-interface type []byte on left). Как иначе можно преобразовать тип?

Kirill
04.07.2016
21:22:38

Vladimir
04.07.2016
21:25:07
Я по chan-у пускаю данные, не хочу типу chan-а давать тип структуры, тот же *Conn, поэтому поставил []byte, вроде так красивее и правильней (chan []byte, классика жанра, дальше просто преобразовать вроде)
Но вот как правильно преобразовать

Kirill
04.07.2016
21:26:06
почему ты не хочешь по каналу соединение кидать?

Vladimir
04.07.2016
21:27:24
Хм, а вот что-то задумался, возмонжо и правда стоит так сделать
Ладно, так все гуд, спасибо

Google

Kirill
04.07.2016
21:28:38
ну, если у тебя нет аргументов насчет того, зачем отращивать себе геморой там, где это делать не обязательно, то это действительно не стоит делать :)

Igor
04.07.2016
21:41:23
го уже не трогал месяц, не помню ничерта

Kirill
04.07.2016
21:42:15
нет, можно в конструкторе

Igor
04.07.2016
21:42:49
но конструктор — это ж условность, да?
NewStructName()

Kirill
04.07.2016
21:43:38
по сути, да

Vladimir
04.07.2016
21:47:02
buffer := []int{}
slice := make([]int, 0)
Есть в чем-то разница? Кроме как первое инициализируется сразу, а второе можно и после инициализировать

Kirill
04.07.2016
21:47:38

Vladimir
04.07.2016
21:48:25
Ну если так писать, то - да. Но в чем разница первого и второго слайса?

Kirill
04.07.2016
21:48:45
но слайсы не стоит инициализировать как []int{}, их лучше make'ом инициализировать, опционально указывать len/cap

Vladimir
04.07.2016
21:49:37
Хм, интересно. Спасибо!

Kirill
04.07.2016
21:50:21
и еще - capacity не стоит указывать тогда, когда ты не уверен, что тебе понадобится не более, чем n cap.
это совет из серии "как не отстрелить себе ногу, не заморачиваясь"

Vladimir
04.07.2016
21:52:19
В смысле? Если инициализировать просто make([]int), то будет ошибка. Ибо требуется размер слайса в виде make([]int, size_slice). size_slice можно поставить нулем, но все же
Или я не правильно понял?
и еще - capacity не стоит указывать тогда, когда ты не уверен, что тебе понадобится не более, чем n cap.

Kirill
04.07.2016
21:53:52
опциональный параметр capacity и обязательный length - разные вещи

Vladimir
04.07.2016
21:56:55
Можете тогда немного подробнее про capacity рассказать? Что это такое и для чего нужно? А еще немного про ':' рассказать, к примеру buffer[:0] и buffer[0? в чем разница? Для чего, как?

Google

Vladimir
04.07.2016
21:57:09
buffer[0 ? *
да блин

Kirill
04.07.2016
21:57:19
(код внутри строки оборачивай в `)
получится вот так
а если в три `
получится
вот так
много строк

Admin
ERROR: S client not available

Vladimir
04.07.2016
21:58:22
Понял, buffer[0:]

Kirill
04.07.2016
21:59:14
Понял, buffer[0:]
buffer[0:] отдаст слайс начиная с нулевого элемента, а buffer[:0] - заканчивая им

Vladimir
04.07.2016
21:59:43
А про capacity?

Kirill
04.07.2016
22:00:24
capacity - это что-то вроде максимального объема. как у ящика - у ящика есть capacity, и ты не можешь положить в него больше, чем в него поместится.

Maxim
04.07.2016
22:00:47

Kirill
04.07.2016
22:01:02

Maxim
04.07.2016
22:01:20
На мобилке это не работает, так что юзай бота @bold

Vladimir
04.07.2016
22:01:28

Maxim
04.07.2016
22:01:29
тест

Kirill
04.07.2016
22:01:57

cptn_foxmk
04.07.2016
22:03:03
точнее будет так сказать: capacity — максимально разрешённое количество памяти под выделение, а length — сколько памяти выделено при создании
если опустить параметр capacity, то она считается равной length по умолчанию

Kirill
04.07.2016
22:04:04
точнее всегда можно нагуглить, а русским языком объяснение можно и не найти ?

cptn_foxmk
04.07.2016
22:05:14
ну да) кстати, мне пока не встретилась ситуация, в которой стоило бы делать их разными

Google

Kirill
04.07.2016
22:06:23

cptn_foxmk
04.07.2016
22:07:44
сомневаюсь, что для ограничения количества игроков стоит использовать такой низкоуровневый механизм
хотя да, вполне юзкейс

Kirill
04.07.2016
22:09:35
коллеги, а кто-то юзает wercker для гошечки?

Gennady
05.07.2016
05:58:10
https://blog.golang.org/go-slices-usage-and-internals
про слайсы. очень хорошо написано.

分解物質
05.07.2016
06:07:30

Kirill
05.07.2016
06:07:53
коллеги, а кто скажет, зачем mysql отправляет три пакета, вместо двух, при запросе из консольного клиента?

Ilnar
05.07.2016
13:22:57

Kirill
05.07.2016
19:10:33

Aleksandr
05.07.2016
19:11:19

Alexander
05.07.2016
19:17:22
Wireshark в помошь)

Kirill
05.07.2016
19:17:52

Alexander
05.07.2016
19:18:39
Одновременно 3 ? Или на один SQL запрос в общем на прием и передачу 3 TCP пакета?
Или на соединение с SQL бд - 3 TCP пакета?

Kirill
05.07.2016
19:19:40
select 1 дает 3 пакета

Alexander
05.07.2016
19:19:59
от тебя на сервер?