В 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)
нравится, как? Можно ли включить какой-то код, чтобы продемонстрировать, что вы имеете в виду? – Nevermore
@Неверно я добавил пример – nikoss
Ну, своего рода. Это нормально использовать указатель как идентификатор, но, пожалуйста, не используйте небезопасное: небезопасный пакет небезопасен, делает даже _less_ гарантии, чем простой указатель. – Volker