2016-12-20 2 views
0

структур У меня есть карта структур следующим образом:Реализация множества структур в пределах карты

type SocketID string 
type Socket struct { 
    socket //... 
    id  string 
} 

type Channel struct { 
    sync.Mutex 
    sockets map[SocketID]Socket 
} 

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

type SubchannelID string 
type Channel struct { 
    sync.Mutex 
    sockets  map[SocketID]Socket 
    subchannels map[SubchannelID]map[SocketID]Socket 
} 

Но проблема у меня с этим вывернув Socket из Channel становится O (N^2) операции, и каждое гнездо дублируется между sockets и subchannels карты. Как бы я оптимизировал это, сохраняя выделенные каналы и подканалы от сокетов?

ответ

0

Ничего, ответ в конечном итоге быть просто:

struct Channel { 
    sync.Mutex 
    sockets  map[SocketID]Socket 
    subchannels map[SocketID]SubchannelID 
} 

func (c Channel) Remove(sid SocketID) { 
    c.Lock() 
    defer c.Unlock() 

    if _, ok := c.sockets[sid]; ok { 
     delete(c.sockets, sid) 
    } 
    if _, ok := c.subchannels[sid]; ok { 
     delete(c.subchannels, sid) 
    } 
} 
Смежные вопросы