Такие языки, как Java, C / C ++ и Go, имеют концепцию указателя. Это концепция, которая позволяет нам манипулировать переменными в форме адреса памяти. Указатель не является большой темой в Golang, но он используется почти везде в вашем коде, если вы работаете над высокопроизводительным проектом Go с высокими стандартами. Если вы хотите знать, что это такое, давайте узнаем прямо сейчас!

Что такое указатель?

Допустим, есть переменная, и она используется в нескольких функциях одновременно. Вы хотите, чтобы он обновлялся автоматически всякий раз, когда какая-либо функция меняет свое значение, чтобы другие могли получить новое значение. Указатель - это концепция, которая может решить эту ситуацию.

Как видно из приведенного выше примера, значение x не изменяется после вызова функции, в отличие от значения y, которое изменилось после вызова функции. Это потому, что Go передает переменную функции по значению, а не по ссылке. Означает, что x в функции main и a в функции update, они не одно и то же, а для y и b, а также . Но разница в том, что перед передачей y функции update он приводится к указателю и отправляется в функцию. Таким образом, функция получит адрес памяти y и использует его для непосредственного изменения значения y.

Декларация

Подобно другим объявлениям типов переменных, указатель использует тот же формат, но вам нужно поставить звездочку (*) перед типом переменной, который вам нужен, чтобы объявить указатель на нее. Как видите, nil - это нулевое значение указателя независимо от типа переменной, на которую указывает указатель.

Для некоторых типов переменных, таких как slice и map, идентификатором этих типов переменных по умолчанию является указатель. Вы можете увидеть, что при печати их значения не будет отображаться nil, но на самом деле они равны nil, если вы сравните значения с nil.

Таким образом, вы можете обновлять значение этих типов переменных внутри других функций точно так же, как указатели других типов переменных. В любом случае вы можете использовать указатель с такими типами переменных, но очень редко вам нужно использовать с ними указатель.

Ваш индивидуальный тип переменной и структура также можно использовать с указателем, и это не сильно меняет способ использования вашей структуры. Что вам нужно сделать, так это просто назначить адрес вашему указателю структуры перед его использованием, что я объясню вам в следующей теме!

Получить адрес

Чтобы использовать получение адреса из переменной, вам нужно поставить амперсанд (&) перед переменной, которая вам нужна, чтобы получить ее адрес.

Вы также можете объявить указатель, назначив адрес из другой переменной, но вы не можете получить адрес из данных базового типа, таких как строка, число и логическое значение.

В любом случае, для некоторого составного типа, такого как struct, вы можете получить адрес, не объявляя другую переменную, из которой нужно получить адрес.

Получите ценность

Как и при получении адреса, вы можете получить значение из указателя, поставив перед указателем звездочку (*).

Пример

Для тех, кто плохо знаком с такими языками, как Go и C / C ++, вы, возможно, не увидите способа сделать его полезным в любом реальном проекте. Итак, я покажу вам пример того, что, я думаю, вы должны использовать в будущем, если собираетесь использовать Golang в своем проекте.

Вот как кодировать и декодировать данные JSON. Как видно из параметров json.Unmarshal, нет необходимости возвращать результат, а просто измените значение второго параметра с помощью указателя.

В любом случае, есть и другие причины, по которым так много библиотек, включая эту, должны использовать указатель вместо того, чтобы возвращать значение, и я объясню вам в следующей статье, которая касается метода и интерфейса. Пожалуйста, следите за обновлениями, спасибо 😎

Рекомендуемые статьи