Переназначение параметра func указателя

Это возможно, и Spring MVC 3 делает это, но я не нашел времени, чтобы посмотреть, как именно.

Согласование имен параметров метода с именами переменных шаблона URI может быть только если ваш код скомпилирован с включенной отладкой. Если вы не включили отладку, вы должны указать имя имени переменной шаблона URI в аннотации @PathVariable, чтобы связать разрешенное значение имени переменной с параметром метода. Например:

Взято из документации весны

0
задан icza 18 January 2019 в 13:08
поделиться

1 ответ

Параметры действуют как локальные переменные внутри функции. Вы можете изменить их значения, но это только изменит значения локальных переменных. Они не зависят от переменных, значение которых вы передаете.

Если вы хотите что-то изменить, вы должны передать его адрес и изменить значение с указанием , например:

func main() {
    var x int
    fmt.Println("before", x)
    set(&x)
    fmt.Println("after", x)
}

func set(i *int) {
    *i = 2
}

Выходы (попробуйте на Перейти Детская площадка ):

before 0
after 2

То же самое относится и к переменным-указателям: если вы хотите изменить переменную-указатель, вам снова нужно передать ее адрес и изменить указанное значение. В случае указателя типом будет указатель на указатель, например:

func main() {
    var x *int
    x = new(int)
    fmt.Println("before", x, *x)
    set(&x)
    fmt.Println("after", x, *x)
}

func set(i **int) {
    p := new(int)
    *p = 2
    *i = p
}

Выход (попробуйте на Go Playground ):

before 0x416020 0
after 0x416040 2
[1118 ] Конечно, если у вас есть переменная указателя и вы не хотите изменять значение указателя только указанным значением, вы можете просто передать указатель и изменить указанное значение:

func main() {
    var x *int
    x = new(int)
    fmt.Println("before", x, *x)
    set(x)
    fmt.Println("after", x, *x)
}

func set(i *int) {
    *i = 2
}

Вывод (попробуйте на Go Playground ):

before 0x416020 0
after 0x416020 2

Одна вещь, на которую стоит обратить внимание: вы не можете передать указатель nil на функцию и ожидать, что сможете назначить что-либо указанному значение: nil указатели указывают в никуда. Вы должны передать указатель, отличный от nil, или в качестве альтернативы вы можете вернуть значение указателя (и назначить его вызывающей стороне).

0
ответ дан icza 18 January 2019 в 13:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: