go - изменение указателя на срез не изменяет оригинал - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь создать структуру, в которой одно поле является указателем на существующий пустой фрагмент.Затем я изменяю поле структуры и позже пытаюсь получить новое содержимое из исходного фрагмента - но он все еще пуст!

Вот демонстрационный код:

package main

import (
    "fmt"
)

type A struct {
    B []int
}

func main() {
    c := []int{}

    a := &A{
        B: c,
    }

    a.B = append(a.B, 5)

    fmt.Println(c)
    fmt.Println(a)
}

Результат здесь:

[]
&{[5]}

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

1 Ответ

1 голос
/ 17 апреля 2019

Вы можете использовать часть указателей, как в примере ниже:

package main

import (
    "fmt"
)

type A struct {
    B *[]int
}

func main() {
    c := []int{}

    a := &A{
        B: &c,
    }

    *a.B = append(*a.B, 4)
    *a.B = append(*a.B, 5)

    fmt.Println(c)

    fmt.Println(a.B)
}

Результат The result is

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