2015-04-08 2 views
5

Учитывая в struct, который выглядит какПростой способ присвоить значения int pointer?

type foo struct { 
i *int 
} 

, если я хочу, чтобы установить i к 1, я должен

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

Есть ли способ сделать это в одной строке, не дать мой новый i Значение собственного имени (в данном случае throwaway)?

ответ

8

Как указано в mailing list, вы можете просто сделать это:

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

, а затем

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

, если вы должны делать это часто. intPtr получает встроенный (см. Вывод go build -gcflags '-m'), поэтому он должен иметь рядом со штрафом за производительность.

+0

Вы также можете сделать 'instance: = foo {i: new (int)}; foo.i = 1; 'если вы не хотите писать отдельную функцию. – fuz

+0

Неправильно @FUZxxl, вы не можете назначить '1' как тип' int' '' int '. Вы оказываетесь в той же ситуации, что и OP. –

+2

Извините, попробуйте 'instance: = foo {i: new (int)}; * foo.i = 1; ' – fuz

5

Нет, это невозможно сделать в одной строке.

+1

Гросс. Любые мысли о том, почему нет? Слишком сложно реализовать, чтобы удалить изредка шумную линию? – MushinNoShin

+4

@MushinNoShin: указатель - это адрес какой-то вещи, поэтому вам нужна эта вещь *. – maerics

+1

@maerics: это уже было понято, это спрашивало, есть ли какие-либо удобные способы автоматического выделения памяти в фоновом режиме и оставить ненужный шум из моего кода. См. Принятый ответ. – MushinNoShin

Смежные вопросы