Структура (struct) в Go — это составной тип данных, который объединяет набор полей (переменных) разных типов под одним именем. Это способ создания собственных сложных типов данных, группирующих логически связанные значения.
type Person struct {
Name string
Age int
Address string
}
type
type Circle struct {
X, Y, Radius float64
}
type Order struct {
ID string
Customer Person
Items []Product
Total float64
}
func (p Person) Greet() string {
return "Hello, " + p.Name
}
type Config struct {
Host string `json:"host"`
Port int `json:"port"`
Timeout int `json:"timeout,omitempty"`
}
// 1. Инициализация с нулевыми значениями
var p1 Person
// 2. Инициализация с значениями
p2 := Person{"Alice", 30, "Moscow"}
// 3. Именованная инициализация
p3 := Person{
Name: "Bob",
Age: 25,
Address: "London",
}
fmt.Println(p3.Name) // Чтение
p3.Age = 26 // Запись
p4 := Person{"Alice", 30, "Moscow"}
fmt.Println(p2 == p4) // true, если все поля равны
type Employee struct {
Person // Встроенная структура
Salary float64
}
type User struct {
ID int `db:"id" json:"user_id"`
Name string `db:"name" json:"user_name"`
}
temp := struct {
X int
Y int
}{10, 20}
ptr := &Person{Name: "Alice"}
fmt.Println((*ptr).Name) // Явное разыменование
fmt.Println(ptr.Name) // Неявное разыменование
package main
import "fmt"
type Rectangle struct {
Width, Height float64
}
// Метод для структуры
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func main() {
rect := Rectangle{10, 5}
fmt.Println("Area:", rect.Area()) // Area: 50
}