yandex
loader

please wait

  • Jadav Payeng Mar-15-2019 06:35:05 AM ( 1 week ago )

     

    I'm trying to write a function that takes in a struct pointer and points it to another address.

    I know I can simply write a function that takes a pointer and manipulates struct fields like so:

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

    However, is it possible to write something like:

    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
    }
  • Lucky Negi Mar-15-2019 06:36:42 AM ( 1 week ago )

    Using new makes a pointer to your struct so you need pointer like 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
    }

    Output:

    &{new value 10}

Please login

Similar Discussion

Recommended For You