Ответ
В Go нет прямой адресной арифметики как в C/C++. Указатели в Go безопасны — нельзя инкрементировать/декрементировать указатель или выполнять арифметические операции над ними.
Однако, можно использовать unsafe.Pointer для низкоуровневых операций, но это не рекомендуется без крайней необходимости:
package main
import (
"fmt"
"unsafe"
)
func main() {
arr := [3]int{1, 2, 3}
p := &arr[0]
// Преобразуем в unsafe.Pointer, затем в uintptr
addr := uintptr(unsafe.Pointer(p)) + unsafe.Sizeof(arr[0])
// Получаем указатель на следующий элемент
next := (*int)(unsafe.Pointer(addr))
fmt.Println(*next) // 2
}
Работа с unsafe требует особой осторожности — неправильное использование может привести к неопределённому поведению. В 99% случаев лучше использовать срезы или другие безопасные механизмы Go.