English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Golang

Условные операторы (Control Statement) в Golang

Функции и методы (Function & Method) в Golang

Структуры (Struct) в Golang

Срезы (Slice) и массивы в Golang

Строки (String) в Golang

Указатели (Pointer) в Golang

Интерфейсы (Interface) в Golang

Конкурентоспособность (Concurrency) в Golang

Ошибки (Error) в Golang

Другие темы Golang

Структура (struct) в Go языке

Структура (struct) в Golang - это пользовательский тип, который позволяет группировать/комбинировать различные типы данных в один тип. Любой объект в реальном мире, у которого есть набор свойств/полей, можно представить как структуру. Этот концепт часто сравнивают с классами в面向 объектном программировании. Она может быть названа легким классом, который не поддерживает наследование, но поддерживает комбинирование.

Например, адрес имеет name, street, city, state, Pincode. Как показано ниже, эти три атрибута можно объединить в структуруAddressимеет смысл.

Определение структуры:

 type Address struct {
      name string 
      street string
      city string
      state string
      Pincode int
}

В предыдущем примере,typeключевое слово вводит новый тип. За ним следует имя типа (Address) и ключевым словомstruct,для того чтобы показать, что мы определяем структуру. Эта структура содержит список полей в фигурных скобках. У каждого поля есть имя и тип.

注意:Мы также можем комбинировать поля одного и того же типа, чтобы сделать их компактными, как показано в следующем примере:

type Address struct {
    name, street, city, state string
    Pincode int
}

Определение структуры:синтаксис объявления структуры:

var a Address

код создаетпеременные, по умолчанию их значение устанавливается в ноль. Для структуры ноль означает, что все поля установлены в их соответствующие нулевые значения. Таким образом, поля name, street, city, state установлены в

Вы также можетеИспользование литерала структуры для инициализации переменных типа структуры.如下所示:

var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}

注意:

始终以在结构中声明它们的顺序传递字段值。同样,您不能仅使用上述语法初始化字段的子集。

Go还支持名称:value语法,用于初始化结构(使用此语法时字段的顺序无关紧要)。而且,这仅允许您初始化字段的子集。所有未初始化的字段均设置为其相应的零值。

例如:

var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
package  main 
  
import  "fmt"
  
// 定义结构类型
type Address struct { 
    Name string 
    city string 
    Pincode int
} 
  
func main()  { 
  
        // 声明一个“struct”类型的变量
        // 初始化所有struct字段
        // 其值为零
    var a Address  
    fmt.Println(a) 
  
        // 声明和初始化
        // struct使用结构文字
    a1 := Address{"Akshay", "Dehradun", 3623572} 
  
    fmt.Println("Address1: ", a1) 
  
        // 在命名字段时
        // 初始化一个结构
    a2 := Address{Name: "Anikaa", city: "Ballia", Pincode: 277001} 
  
    fmt.Println("Address2: ", a2) 
  
        // 未初始化的字段设置为
        // 它们对应的零值
    a3 := Address{Name: "Delhi"} 
    fmt.Println("Address3: ", a3) 
}

输出:

{ 0}
Address1: {Akshay Dehradun 3623572}
Address2: {Anikaa Ballia 277001}
Address3: {Delhi 0}

如何访问结构的字段?

要访问结构的各个字段,您必须使用点(.)运算符。

package  main 
  
import  "fmt"
  
// 定义结构体 
type Car struct { 
    Name, Model, Color string 
    WeightInKg float64 
} 
  
func main()  { 
    c := Car{Name: "Ferrari", Model: "GTC4", Color: "Red", WeightInKg: 1920} 
  
        //访问结构字段
        //使用点运算符
    fmt.Println("Car Name:  ", c.Name) 
    fmt.Println("Car Color:  ", c.Color) 
        //赋新值
        //指向一个结构字段
    c.Color  =  "Black"
      
    //显示结果
    fmt.Println("Car:  ", c) 
}

输出:

Car Name:  Ferrari
Car Color:  Red
Car:  {Ferrari GTC4 Black 1920}

指向结构的指针

Golang中的指针是一个变量,用于存储另一个变量的内存地址。您还可以创建一个指向结构的指针,如以下示例所示:

//  指向结构体的指针
package  main 
  
import  "fmt"
  
//  定义一个结构
type Employee  struct  { 
    firstName,  lastName  string 
    age,  salary  int
} 
  
func main()  { 
  
        //传递struct变量的地址
        //  emp8是指向Employee结构的指针
    emp8  :=  &Employee{Sam,  "Anderson",  55,  6000} 
  
        //(*  emp8).firstName是要访问的语法
        //  emp8结构的firstName字段
    fmt.Println("First Name:",  (*emp8).firstName) 
    fmt.Println("Age:",  (*emp8).age) 
}

输出:

First Name:  Sam
Age:  55

Golang为我们提供了使用emp8.firstName而不是显式解引用(* emp8).firstName来访问firstName字段的选项。 显示此示例如下:

//指向结构的指针
package  main 
  
import  "fmt"
  
//定义一个结构
type Employee  struct  { 
    firstName,  lastName  string 
    age,  salary  int
} 
  
func main()  { 
  
    //获取指向结构体的指针
    emp8  :=  &Employee{Sam,  "Anderson",  55,  6000} 
  
        //  emp8.firstName用于访问
        //字段firstName
    fmt.Println("First Name:  ", emp8.firstName) 
    fmt.Println("Age:  ", emp8.age) 
}

输出:

First Name:  Sam
Возраст:  55