У меня есть структура в go, которая:
type AcceptMsg struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Rnd *Round `protobuf:"bytes,1,opt,name=rnd,proto3" json:"rnd,omitempty"`
Slot *Slot `protobuf:"bytes,2,opt,name=slot,proto3" json:"slot,omitempty"`
Val *Value `protobuf:"bytes,3,opt,name=val,proto3" json:"val,omitempty"`
}
Я добавил экземпляры из этой структуры в acceptMsgQueue *list.List мой вопрос: как я могу получить доступ к переменным экземпляра, когда я получаю их из списка:
for f:= p.acceptMsgQueue.Front(); f!= nil; f = f.Next() {
acceptMsg:= f.Value
}
когда я ставлю точку из acceptMsgв vscode, он не распознает его как правильный тип, и у меня нет доступа к Rndи Slotи Valкак к свойствам acceptMsg.
Решение проблемы
Из документов значение элемента списка хранится с использованием any(иначе interface{}):
type Element struct {
Value any
}
поэтому, чтобы увидеть исходное конкретное значение, вам нужно выполнить утверждение типа:
acceptMsg, ok:= f.Value.(AcceptMsg) // ok==true if dynamic type is correct
Комментариев нет:
Отправить комментарий