Указатели на Голанге - PullRequest
       5

Указатели на Голанге

0 голосов
/ 19 сентября 2018

Почему это:

obj := *g
return &obj, nil

не равно этому:

return &(*g), nil

Не должно ли это работать аналогичным образом (указатель возврата, указывающий на новую памятьрегион с данными из g struct)?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я не уверен, что это не то же самое.

package main

import "fmt"

type G struct {

}

func foo(g *G) (*G, error) {
  return &(*g), nil
}

func bar(g *G) (*G, error) {
  obj := (*g)
  return &obj, nil
}

func main() {
  g := &G{}

  a, _ := foo(g)
  b, _ := bar(g)

  fmt.Printf("a: %p, b: %p\n", a, b)  // gives the same pointer value
}

Попробуйте здесь

0 голосов
/ 19 сентября 2018

В первом случае вы выделяете новую область памяти, объявляя obj.Во втором вы просто ссылаетесь на значение в g, которое просто g.

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