@proGO

Страница 159 из 1674
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 для этой проверки, а с массивами как быть?

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

Kirill
04.07.2016
16:52:01
можно. а почему не слайсы?

зачем нужны напрямую массивы?

[Anonymous]
04.07.2016
16:59:09
зачем нужны напрямую массивы?
пусть будут слайсы s := make([][]int, 10*10) a := s[-3][500] как проверить перед присвоением?

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). Как иначе можно преобразовать тип?

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
нужно. сделай конструктор структуры.
Прямо в структуре нельзя написать = make(...)?

го уже не трогал месяц, не помню ничерта

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) Есть в чем-то разница? Кроме как первое инициализируется сразу, а второе можно и после инициализировать

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
а если в три ` получится вот так много строк
короче, однострочный код оборачивать в один символ `, а многострочный в три

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

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
ну да) кстати, мне пока не встретилась ситуация, в которой стоило бы делать их разными
в играх для комнат можно. в каждой, например, 10к игроков максимум - это cap, а len = 0, потому что нафига выделять память на это заранее?

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
точнее будет так сказать: capacity — максимально разрешённое количество памяти под выделение, а length — сколько памяти выделено при создании
cap(slice) — сколько памяти уже выделено под слайс, len(slice) — какая часть от этой памяти уже доступна на использование, len(slice) увеличивается после каждого append(slice, xxx), при этом если len становится больше cap то слайс реаллоцируется и cap увеличивается в двое

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

Kirill
05.07.2016
19:10:33
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
от тебя на сервер?

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