Пример ситуации:
Есть глобальная структура, содержащая фрагмент структур.
type stctUser struct {
user string
privilege int
created time.Time
}
type stctAllUsers struct {
sync.RWMutex
slcUsers []stctUser
}
var strctAllUsers stctAllUsers
Есть функция, которая хочет работать с пользователями и сокращать время, которое она блокирует.глобальная структура, я хочу захватить пользователя и снять блокировку
var strctUserTemp stctUser
strctAllUsers.RLock
for a := range strctAllUsers.slcUsers {
if tmpName == strctAllUsers.slcUsers[a].user {
strctUserTemp = strctAllUsers.slcUsers[a]
break
}
}
strctAllUsers.RUnlock
Работает ли strctUserTemp с отдельной копией slcUsers [a], или это указатель на этот элемент слайса?Например, strctAllUsers.slcUsers [a] равен "Tom" и, если изменить strctUserTemp.user = "Bob", strctAllUsers.slcUsers [a] все равно будет Tom?
(Раньше кажется, что при создании копиифрагмент новой переменной будет означать, что изменения этой новой переменной могут изменить оригинал ... поэтому он назначил указатель вместо создания копии. Или я неправильно запомнил?)
Обновление: видя, как я былслишком глупо, чтобы потратить пять минут, чтобы проверить это ... вот ссылка на поведение, которое заставило меня в первую очередь подвергнуть сомнению это, и я хотел уточнить реализацию, прежде чем предположить, что я понимаю, что происходит, и создать ошибку в реальномвещи, над которыми я работал.https://play.golang.org/p/ndmJ0h1z-sT