golang в чем разница между return [] * TreeNode {} и return [] * TreeNode {nil} - PullRequest
0 голосов
/ 17 февраля 2020

Я новичок в golang и смущен следующим:

type TreeNode struct {
    Val   int
    Left  *TreeNode
    Right *TreeNode
}

func test() []*TreeNode {

    return []*TreeNode{}
}

func test1() []*TreeNode {

    return []*TreeNode{nil}
}

Я пытаюсь написать забавную рекурсию c на TreeNode, однако, если бы я использовал test стиль для представления конечного узла, я получу пустой фрагмент TreeNode от вызывающего абонента fun c.

Если я использую test1 для представления конечного узла, то поведение будет таким, как я хочу.

Я чувствую, что для test1 это дает мне точку на пустой TreeNode, однако код test дает мне точку для nil ... Я не уверен, если Я понимаю это правильно или нет. Можете ли вы указать мне правильные термины или понятия, чтобы копать, это будет здорово.

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

Заранее спасибо.

1 Ответ

1 голос
/ 17 февраля 2020

Возвращает пустой срез:

return []*TreeNode{}

Возвращает срез, содержащий один элемент, и этот элемент является нулевым указателем:

return []*TreeNode{nil}

Ни один из них не даст вам TreeNode хотя. Второй дает вам указатель TreeNode, который равен нулю. То, как вы их интерпретируете, зависит от остальной части кода, но я сомневаюсь, что это действительно то, что вам нужно, поскольку ни у одного из них не может быть поля val.

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