РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
456 of 1593 menu

Функция new для структур

Функция new выделяет память под структуру и возвращает указатель на нее. В качестве параметра функция принимает тип структуры. Все поля структуры при этом инициализируются нулевыми значениями (для чисел это 0, для строк - пустая строка, для булевых - false).

Синтаксис

new(StructType)

Пример

Давайте создадим структуру Person и с помощью функции new получим указатель на нее:

package main import "fmt" type Person struct { Name string Age int } func main() { p := new(Person) fmt.Printf("Type: %T, Value: %v\n", p, p) fmt.Printf("Name: %q, Age: %d\n", p.Name, p.Age) }

Результат выполнения кода:

"Type: *main.Person, Value: &{ 0}" "Name: "", Age: 0"

Пример

Создадим структуру User, заполним поля через указатель и выведем ее содержимое:

package main import "fmt" type User struct { ID int Active bool Login string } func main() { u := new(User) u.ID = 1 u.Active = true u.Login = "john_doe" fmt.Printf("User: %+v\n", u) fmt.Printf("ID: %d, Active: %t, Login: %s\n", u.ID, u.Active, u.Login) }

Результат выполнения кода:

"User: &{ID:1 Active:true Login:john_doe}" "ID: 1, Active: true, Login: john_doe"

Пример

Сравним работу функции new с литералом структуры. В первом случае мы получаем указатель, во втором - значение:

package main import "fmt" type Point struct { X int Y int } func main() { p1 := new(Point) p2 := Point{X: 5, Y: 10} fmt.Printf("p1: %T, value: %v\n", p1, p1) fmt.Printf("p2: %T, value: %v\n", p2, p2) }

Результат выполнения кода:

"p1: *main.Point, value: &{0 0}" "p2: main.Point, value: {5 10}"

Смотрите также

Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить