Мутировать строку в Голанге? - PullRequest
0 голосов
/ 09 октября 2019

В целях тестирования я пытаюсь смоделировать метод Rows.Scan из библиотеки database/sql. Подпись выглядит следующим образом:


func (r *Rows) Scan(dest ...interface{}) error

Многие примеры использования этого метода показывают, что вы передаете указатель на строку (например) в метод Scan, и он присваивает значение через указатель.

var name string
rows.Scan(&name)

Я пытался воссоздать нечто подобное для моего собственного понимания и, в конце концов, для насмешек, но это не работает.

func MockScan(args ...interface{}) {
    var s2 string
    fmt.Println(args[0])
    args[0] = &s2
    fmt.Println(args[0])
}

func main() {
    var s1 string
    fmt.Println(&s1)
    MockScan(&s1)
    fmt.Println(&s1)
}

Результат:

0xc000012950
0xc000012950
0xc000012960
0xc000012950

Где моя начальная строка никогда не принимает новое значение. Я понимаю, что строки являются неизменяемыми (хотя мое истинное понимание этой концепции немного шатко), но каким-то образом фактическому методу Rows.Scan удается изменить строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...