среда, 9 января 2019 г.

Основы Go: структуры (struct)

Структуры (struct) это коллекция полей.

package main

import "fmt"

type Vertex struct {
  X int
  Y int
}

func main() {
  fmt.Println(Vertex{1, 2})
}

Вывод:

{1 2}

Поля структуры

Доступ к полям структуры производится с помощью точки.

package main

import "fmt"

type Vertex struct {
  X int
  Y int
}

func main() {
  v := Vertex{1, 2}
  v.X = 4
  fmt.Println(v.X)
}

Вывод:

4

Указатели на структуры

Доступ к полям структуры может быть получен через указатель на структуру.

Чтобы получить поле X структуры, когда у нас есть указатель на структуру p, мы можем написать (*p).X. Однако такая запись громоздка, поэтому язык позволяет нам просто писать p.X, без явного разыменования.

package main

import "fmt"

type Vertex struct {
  X int
  Y int
}

func main() {
  v := Vertex{1, 2}
  p := &v
  p.X = 1e9
  fmt.Println(v)
}

Вывод:

{1000000000 2}

Литералы структур

Литерал структуры определяет новую структуру путем перечисления значений ее полей.

Вы можете перечислить не все поля, а лишь некоторое подмножество с помощью синтаксиса Name:. (Тогда порядок именованных полей не имеет значения.)

Специальный префикс & возвращает указатель на структуру.

package main

import "fmt"

type Vertex struct {
  X, Y int
}

var (
  v1 = Vertex{1, 2}  // имеет type Vertex
  v2 = Vertex{X: 1}  // Y:0 неявно
  v3 = Vertex{}      // X:0 и Y:0
  p  = &Vertex{1, 2} // имеет type *Vertex
)

func main() {
  fmt.Println(v1, p, v2, v3)
}

Вывод:

{1 2} &{1 2} {1 0} {0 0}


Читайте также:


Комментариев нет:

Отправить комментарий