1

В golang мне нужно создать соединение с веб-разъемом и отслеживать всех подключенных пользователей, широковещательную или пользовательскую связь и т. Д. как идентификатор каждого пользователя, я планирую использовать адрес памяти этого соединения. Есть ли недостатки в этом подходе? По-моему, это не должно создавать никаких проблем, потому что каждый сокет создается в контексте конца запроса, уничтоженного при завершении соединения с веб-узлом, и программа должна хранить все эти адреса памяти, пока сохраняется соединение.Безопасно ли принимать указательный адрес и использовать его как уникальный идентификатор?

var Socket *socket //i did this in order Socket to be ready without init out of the box just like Mutex //check init function to see how i handle this 

type socket struct { 
    connectedUsers []*User 
} 

type User struct { 
    Id unsafe.Pointer 
    Conn *websocket.Conn 
} 

func init() { 
    var sock = new(socket) 
    sock.connectedUsers = make([]*User, 0) 
    Socket = sock 
} 

//NewConnection add a new *User into connected users list 
func (*socket) NewConnection(sock *websocket.Conn) { 
    usr:=new(User) 
    usr.Conn=sock 
    usr.Id=unsafe.Pointer(usr) 
    Socket.connectedUsers=append(Socket.connectedUsers,usr) 
} 
//then i can do something like 
//theOtherUser:=*(*websocket.Conn)(usr.Id)//this will give the connection of the user (hopefully) 
+0

нравится, как? Можно ли включить какой-то код, чтобы продемонстрировать, что вы имеете в виду? – Nevermore

+0

@Неверно я добавил пример – nikoss

+1

Ну, своего рода. Это нормально использовать указатель как идентификатор, но, пожалуйста, не используйте небезопасное: небезопасный пакет небезопасен, делает даже _less_ гарантии, чем простой указатель. – Volker

ответ

0

в конце концов, я сделал что-то вроде this и она работает очень хорошо