Как назначить адрес параметру указателя - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь написать функцию, которая принимает указатель struct и указывает его на другой адрес.

Я знаю, что могу просто написать функцию, которая принимает указатель и манипулирует полями structвот так:

func ManipulateStruct(myPointer *MyStruct) {
    myPointer.Field1 = "new value"
    myPointer.Field2 = 10
}

Однако можно ли написать что-то вроде:

func ManipulateStruct(myPointer *MyStruct) {
    newPointer := new(MyStruct)
    newPointer.Field1 = "new value"
    newPointer.Field2 = 10

    // myPointer = &newPointer <-- illegal
    // cannot use &newPointer (type **MyStruct) as type *MyStruct in assignment

    myPointer = newPointer
}

1 Ответ

3 голосов
/ 15 марта 2019

Использование new делает указатель на ваш struct, поэтому вам нужен указатель типа this :

package main

import "fmt"

func main() {
    var ptr *MyStruct
    ManipulateStruct(&ptr)
    fmt.Println(ptr)
}
func ManipulateStruct(myPointer **MyStruct) {
    newPointer := new(MyStruct)
    newPointer.Field1 = "new value"
    newPointer.Field2 = 10
    *myPointer = newPointer
}

type MyStruct struct {
    Field1 string
    Field2 int
}

Выход:

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