Skip to main content

Struktūros

M.Gzegozevskis...About 3 minGo programavimo kalbaGo

Struktūros dar žinomos kaip įrašas

Duomenims saugoti vietoje įprastų kintamųjų naudojimo yra numatyta struct žodis sukurti įraša kuriama bus saugoma daugiau nei vienas laukas
Pavyzdžiui norint saugoti adresą galima sukurti struktūrą kuri saugos visus adresui reikalingus duomenis:

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

Supaprastintas variantas tos pačios adreso struktūros:

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

Programoje struktūros kintamieji naudojami kaip įprasti kintamieji:

var adresas Address

Pavyzdys naudojant struktūrą:

package main
 
import "fmt"
 
// Defining a struct type
type Address struct {
    Name    string
    city    string
    Pincode int
}
 
func main() {
 
    // Declaring a variable of a `struct` type
    // All the struct fields are initialized
    // with their zero value
    var a Address
    fmt.Println(a)
 
    // Declaring and initializing a
    // struct using a struct literal
    a1 := Address{"Akshay", "Dehradun", 3623572}
 
    fmt.Println("Address1: ", a1)
 
    // Naming fields while
    // initializing a struct
    a2 := Address{Name: "Anikaa", city: "Ballia",
                                 Pincode: 277001}
 
    fmt.Println("Address2: ", a2)
 
    // Uninitialized fields are set to
    // their corresponding zero-value
    a3 := Address{Name: "Delhi"}
    fmt.Println("Address3: ", a3)
}

Ekrane bus išvestas rezultatas:

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

Kaip pasiekti struktūros laukus įprastai naudojamas taškas:

package main
 
import "fmt"
 
// defining the struct
type Car struct {
    Name, Model, Color string
    WeightInKg         float64
}
 
// Main Function
func main() {
    c := Car{Name: "Ferrari", Model: "GTC4",
            Color: "Red", WeightInKg: 1920}
 
    // Accessing struct fields
    // using the dot operator
    fmt.Println("Car Name: ", c.Name)
    fmt.Println("Car Color: ", c.Color)
 
    // Assigning a new value
    // to a struct field
    c.Color = "Black"
     
    // Displaying the result
    fmt.Println("Car: ", c)
}

Ekrane bus išvestas tekstas:

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

Rodyklės į struktūras naudojamos pavyzdžiui:

package main
 
import "fmt"
 
// defining a structure
type Employee struct {
    firstName, lastName string
    age, salary int
}
 
func main() {
 
    // passing the address of struct variable
    // emp8 is a pointer to the Employee struct
    emp8 := &Employee{"Sam", "Anderson", 55, 6000}
 
    // (*emp8).firstName is the syntax to access
    // the firstName field of the emp8 struct
    fmt.Println("First Name:", (*emp8).firstName)
    fmt.Println("Age:", (*emp8).age)
}

Supaprastinti rodyklės naudojimą galima naudojant tašką vietoje (*emp8).firstName naudosime emp8.firstName:

package main
 
import "fmt"
 
// Defining a structure
type Employee struct {
    firstName, lastName string
    age, salary         int
}
 
// Main Function
func main() {
 
    // taking pointer to struct
    emp8 := &Employee{"Sam", "Anderson", 55, 6000}
 
    // emp8.firstName is used to access
    // the field firstName
    fmt.Println("First Name: ", emp8.firstName)
    fmt.Println("Age: ", emp8.age)
}

Vidinės struktūros (Nested Structures)

Aprašomos kaip įprastai struktūra, bet esminis skirtumas jog viena struktūra priklausoma nuo kitos pavyzdžiui:

type struct_name_1 struct{
  // Fields
} 
type struct_name_2 struct{
  variable_name  struct_name_1
}

Pavyzdys 1. naudojant vidinę struktūrą:

package main
 
import "fmt"
 
// Creating structure
type Author struct {
    name   string
    branch string
    year   int
}
 
// Creating nested structure
type HR struct {
 
    // structure as a field
    details Author
}
 
func main() {
 
    // Initializing the fields
    // of the structure
    result := HR{
     
        details: Author{"Sona", "ECE", 2013},
    }
 
    // Display the values
    fmt.Println("\nDetails of Author")
    fmt.Println(result)
}

Ekrane bus išvestas rezultatas:

Details of Author
{{Sona ECE 2013}}

Pavyzdys 2. naudojant vidinę struktūrą:

package main
 
import "fmt"
 
// Creating structure
type Student struct {
    name   string
    branch string
    year   int
}
 
// Creating nested structure
type Teacher struct {
    name    string
    subject string
    exp     int
    details Student
}
 
func main() {
 
    // Initializing the fields
    // of the structure
    result := Teacher{
        name:    "Suman",
        subject: "Java",
        exp:     5,
        details: Student{"Bongo", "CSE", 2},
    }
 
    // Display the values
    fmt.Println("Details of the Teacher")
    fmt.Println("Teacher's name: ", result.name)
    fmt.Println("Subject: ", result.subject)
    fmt.Println("Experience: ", result.exp)
 
    fmt.Println("\nDetails of Student")
    fmt.Println("Student's name: ", result.details.name)
    fmt.Println("Student's branch name: ", result.details.branch)
    fmt.Println("Year: ", result.details.year)
}

Ekrane bus išvestas rezultatas:

Details of the Teacher
Teacher's name:  Suman
Subject:  Java
Experience:  5

Details of Student
Student's name:  Bongo
Student's branch name:  CSE
Year:  2

Pavyzdys 3. naudojant vidinę struktūrą:

package main
 
import (
    "fmt"
)
 
type Address struct {
    Street     string
    City       string
    State      string
    PostalCode string
}
 
type Person struct {
    FirstName string
    LastName  string
    Age       int
    Address   Address
}
 
func main() {
    p := Person{
        FirstName: "John",
        LastName:  "Doe",
        Age:       30,
        Address: Address{
            Street:     "123 Main St",
            City:       "Anytown",
            State:      "CA",
            PostalCode: "12345",
        },
    }
 
    fmt.Println(p.FirstName, p.LastName)
    fmt.Println("Age:", p.Age)
    fmt.Println("Address:")
    fmt.Println("Street:", p.Address.Street)
    fmt.Println("City:", p.Address.City)
    fmt.Println("State:", p.Address.State)
    fmt.Println("Postal Code:", p.Address.PostalCode)
}

Ekrane bus išvestas rezultatas:

John Doe
Age: 30
Address:
Street: 123 Main St
City: Anytown
State: CA
Postal Code: 12345

Anoniminės struktūros:

variable_name := struct{
// fields
}{// Field_values}

Pavyzdys 1. naudojant anoniminę struktūrą:

package main
  
import "fmt"
  
// Main function
func main() {
  
    // Creating and initializing
    // the anonymous structure
    Element := struct {
        name      string
        branch    string
        language  string
        Particles int
    }{
        name:      "Pikachu",
        branch:    "ECE",
        language:  "C++",
        Particles: 498,
    }
  
    // Display the anonymous structure
    fmt.Println(Element)
}

Ekrane bus išvestas rezultatas:

{Pikachu ECE C++ 498}

Anoniminiai laukai struktūrose

Pavyzdžiai kaip atrodo struktūros:

type strukturos_vardas struct{
    int
    bool
    float64
}
type duomenys struct{
    int
    int
}
type studentas struct{
 vardas int
 kaina int
 string
}

Pavyzdys 1. naudojant anoniminius laukus struktūrose:

package main
  
import "fmt"
  
// Creating a structure
// with anonymous fields
type studentas struct {
    int
    string
    float64
}
func main() {  
    // reikšmių priskyrimas anoniminiams laukams
    petras := studentas{987114, "Petras", 30.99}
  
    // Atvaizduoti studento struktūros duomenis
    fmt.Println("Studento id : ", petras.int)
    fmt.Println("Studento vardas : ", petras.string)
    fmt.Println("Kurso kaina : ", petras.float64)
}

Ekranas bus išvestas rezultatas:

Studento id :  987114
Studento vardas :  Petras
Kurso kaina :  30.99
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8