Публикации - Go

Типы данных - Составные типы данных - Структуры

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

Определяя новую структуру, вы группируете набор значений в единый тип данных, который позволяет вам передавать и получать этот набор как единый объект. Структура имеет поля, и у каждого поля есть собственный тип данных, который даже может быть другой структурой или срезом структур. Кроме того, поскольку структура является новым типом данных, она определяется с помощью ключевого слова type, за которым следует название структуры и ключевое слово struct. Следующий код определяет новую структуру Entry:

type Entry struct {
  Name string
  Surname string
  Year int
}

Кроме того, вы можете создавать новые экземпляры структуры, используя ключевое слово new(), например:

pS := new(Entry)

Таким образом создаётся объект, который обладает следующими свойствами. Рассмотрим работу со структурами на примере:

 

package main

import "fmt"

// Данный код объявляет структуру Entry
type Entry struct {
	Name    string
	Surname string
	Year    int
}

// в этой функции происходит вывод данных структуры
func zeroS() Entry {
	return Entry{}
}

Если переменной не задано начальное значение, то компилятор Go автоматически инициализирует ее нулевым значением ее типа данных. Для структур это означает, что структурная переменная без начального значения инициализируется нулевыми значениями каждого из типов данных ее полей. Следовательно, функция zeroS() возвращает инициализированную нулями структуру Entry.

Добавим функцию добавления элементов в структуру Entry:

// функция добавления данных в структуру Entry:
func initS(N, S string, Y int) Entry {
	if Y < 2000 {
		return Entry{Name: N, Surname: S, Year: 2000}
	}
	return Entry{Name: N, Surname: S, Year: Y}
}

Благодаря такому понятию как "срезы структур" мы можем получить доступ к группе элементов структур по заданным параметрам. Пример:

package main

import (
	"fmt"
	"strconv"
)

type record struct {
	Field1 int
	Field2 string
}

func main() {
	S := []record{}
	for i := 0; i < 10; i++ {
		text := "text" + strconv.Itoa(i)
		temp := record{Field1: i, Field2: text}
		S = append(S, temp)
	}
	// Accessing the fields of the first element
	fmt.Println("Index 0:", S[0].Field1, S[0].Field2)
	fmt.Println("Number of structures:", len(S))
	sum := 0
	for _, k := range S {
		sum += k.Field1
	}
	fmt.Println("Sum:", sum)
}

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться