Вы точно сталкивались с тем, что указатель на структуру сделать легко, а вот на простое значение вроде
int — уже приходится извращаться.
a := 77
b := &a
fmt.Println(*b) // 77
Это работает, но выглядит, мягко говоря, странно.
В Go 1.26 завезут следующее:
a := new(42)
fmt.Println(*a) // 42
То же самое будет работать и для строк, слайсов, даже для результата функции:
s := "hello"
ps := new(s)
fmt.Println(*ps) // hello
type Point struct { X, Y int }
pp := new(Point{X: 5, Y: 7})
fmt.Println(*pp) // {5 7}
f := func() string { return "GoLang" }
pf := new(f())
fmt.Println(*pf) // GoLang
На просторах интернета уже можно найти следующее:
“RIP всем самописным PointerTo[T any](in T) *T — теперь в стандартной библиотеке есть всё необходимое. Маленькое и незаметное изменение, но с огромным профитом.”Единственный нюанс:
new() всегда аллоцирует новое место и кладёт туда копию значения. То есть new(*p) сделает копию того, на что указывает p, а не новый указатель на тот же объект.👍 Давай еще новостей про грядущий релиз
🔥 Фича топ