Работа со структурами в Golang
Структуры в Golang - это возможность создавать определяемый пользователем тип данных из группы полей данных с разными типами данных. Поле данных в структуре может быть объявлено со встроенными или определяемыми пользователем типами данных.
Концепцию структуры можно сравнить с объектно-ориентированным программированием, которое поддерживает композицию, но не наследование.
Объявить структуру
Мы можем представить свойства или поля любой реальной сущности в структуре. Например, у сотрудника есть такие свойства, как firstName, lastName, age, phone, address и salary. Мы можем сгруппировать эти свойства в структуру Employee
, как показано ниже.
type Employee struct {
firstName string
lastName string
age int
phone int
address string
salary int
}
Приведенное выше будет объявлять тип структуры Employee
и полями. Мы также можем объявить поля данных одного типа в одной строке как поля данных, разделенные запятыми, как показано ниже.
type Employee struct {
firstName, lastName, address string
age, phone, salary int
}
Создать экземпляр структуры
Мы можем создать экземпляр структуры, присвоив его переменной.
var emp = Employee
или
emp := Employee
Мы также можем создать экземпляр, используя ключевое слово new
.
emp := new(Employee)
Вот полный пример кода для создания экземпляра структуры Employee
и передачи значений полей данных. Мы также будем получать доступ к значениям полей данных с помощью оператора .
.
package main
import "fmt"
type Employee struct {
firstName, lastName, address string
age, phone, salary int
}
func main() {
emp := Employee{firstName: "Jhon", lastName: "Smith", age: 35, phone: 123456789, salary: 50000, address: "Newyork"}
fmt.Println("Employee name : ", emp.firstName, emp.lastName)
fmt.Println("Employee age : ", emp.age)
fmt.Println("Employee salary : ", emp.salary)
fmt.Println("Employee phone : ", emp.phone)
fmt.Println("Employee address : ", emp.address)
}
Приведенный выше пример кода выведет следующее:
Employee name : Jhon Smith
Employee age : 35
Employee salary : 50000
Employee phone : 123456789
Employee address : Newyork
Экземпляр структуры с помощью указателя
Мы можем создать экземпляр структуры, используя символ оператора адреса указателя &
.
package main
import "fmt"
type Employee struct {
firstName, lastName, address string
age, phone, salary int
}
func main() {
emp1 := &Employee{"Kane", "William", "London", 30, 123456789, 40000}
fmt.Println(emp1)
emp2 := &Employee{firstName: "Jhon", lastName: "Smith", age: 35, phone: 123456789, salary: 50000, address: "Newyork"}
fmt.Println(emp2)
}
Приведенный выше пример кода выведет следующее:
&{Kane William London 30 123456789 40000}
&{Jhon Smith Newyork 35 123456789 50000}
Вложенные структуры
Мы можем создать структуру, содержащую в себе другую структуру. В приведенном ниже примере мы будем использовать структуру Address
внутри структуры Employee
для города, штата и страны сотрудника.
package main
import "fmt"
type Employee struct {
firstName, lastName string
age, phone, salary int
address Address
}
type Address struct {
city string
state string
country string
}
func main() {
emp := Employee{
firstName: "Jhon",
lastName: "Smith",
age: 35,
phone: 123456789,
salary: 50000,
address: Address{
city: "Chicago",
state: "Illinois",
country: "USA",
},
}
fmt.Println("Employee name : ", emp.firstName, emp.lastName)
fmt.Println("Employee city : ", emp.address.city)
fmt.Println("Employee city : ", emp.address.state)
fmt.Println("Employee city : ", emp.address.country)
}
Приведенный выше пример кода выведет следующее:
Employee name : Jhon Smith
Employee city : Chicago
Employee city : Illinois
Employee city : USA