Я пытаюсь понять указатели в го, но я все еще немного запутался, как они работают.
Я уже смотрю на другой вопрос по SO: печать адреса слайса в golang, Как напечатать значение указателя объекта Go? Что означает значение указателя? , но я все еще не могу обдумать эту концепцию.
package main
import (
"fmt"
)
func main() {
numbers := myNumbers{42}
println("Pointer to numbers", &numbers)
numbers.printSlice()
numbers.printPointer()
}
type myNumbers []int
func (m myNumbers) printSlice() {
fmt.Printf("printSlice - value of m: %p \n", m)
fmt.Printf("printSlice - value of &m: %p\n", &m)
}
func (m *myNumbers) printPointer() {
fmt.Printf("printPointer - value of m: %p\n", m)
fmt.Printf("printPointer - value of &m: %p\n", &m)
}
И вывод:
Pointer to numbers 0xc42000a060
printSlice - value of m: 0xc420016100
printSlice - value of &m: 0xc42000a080
printPointer - value of m: 0xc42000a060
printPointer - value of &m: 0xc42000c030
Согласно документации goprintSlice
, в первой строке будет напечатан адрес первого элемента массива, во второй строке будет напечатан адрес копии заголовка слайса
В printPointer
, в первой строке будет напечатано значениеуказатель, во второй строке будет напечатан адрес указателя
В main
prinln
печатается тот же адрес, что и в первой строке printPointer
, поэтому это означает, что в printPointer
I 'у вас есть указатель, который указывает на исходный указатель?
Верны ли вышеуказанные предположения?