2015-04-08 12 views
5

otrzymał struct który wygląda jakŁatwy sposób przypisania wartości wskaźnika int?

type foo struct { 
i *int 
} 

jeśli chcę ustawić i do 1, muszę

throwAway := 1 
instance := foo { i: &throwAway } 

Czy istnieje jakiś sposób, aby to zrobić w jednej linii bez konieczności dać mój nowy i wartość to jego własna nazwa (w tym przypadku throwaway)?

Odpowiedz

8

Jak wskazano w mailing list, można po prostu to zrobić:

func intPtr(i int) *int { 
    return &i 
} 

a następnie

instance := foo { i: intPtr(1) } 

jeśli trzeba to robić częściej. intPtr zostaje wstawiony (patrz wyjście go build -gcflags '-m'), więc powinien mieć obok brak kary za wydajność.

+0

Można również wykonać 'instance: = foo {i: new (int)}; foo.i = 1; 'jeśli nie chcesz pisać osobnej funkcji. – fuz

+0

To nie jest w porządku @FUZxxl, nie można przypisać '1' jako typ' int' do '* int'. Wracasz do tej samej sytuacji co OP. –

+2

Przepraszam, spróbuj 'instance: = foo {i: new (int)}; * foo.i = 1; ' – fuz

5

Nie można tego zrobić w jednym wierszu.

+1

Brutto. Wszelkie przemyślenia, dlaczego nie? Czy jest to zbyt trudne do wykonania, aby usunąć od czasu do czasu głośną linię? – MushinNoShin

+4

@MushinNoShin: wskaźnik jest adresem jakiejś rzeczy, więc potrzebujesz tego * rzeczy *. – maerics

+1

@maerics: to było już zrozumiałe, to było pytanie, czy są jakieś dogodne sposoby automatycznego przydzielania pamięci w tle i utrzymywania niepotrzebnego hałasu z mojego kodu. Zobacz zaakceptowaną odpowiedź. – MushinNoShin

Powiązane problemy