navigation

Anonymous structures and fields in Golang

In Golang , structures (or structs) allow us to group elements of different types into a single unit, which is useful for modeling real-world entities. Anonymous structures in Golang are temporary structures without names that are used for one-time purposes, while anonymous fields allow embedding of unnamed fields.

 

For example:

package main import "fmt" // struct học sinh với cấu trúc và trường ẩn danh type Student struct { struct { // Cấu trúc bên trong ẩn danh cho thông tin cá nhân name string enrollment int } GPA float64 // Trường chuẩn } func main() { student := Student{ struct { name string enrollment int }{ name: "A", enrollment: 12345, }, GPA: 3.8, } fmt.Println("Name:", student.name) fmt.Println("Enrollment:", student.enrollment) fmt.Println("GPA:", student.GPA) } 

Syntax:

variable := struct { field1 dataType1 field2 dataType2 # Cấu trúc ẩn danh // Trường bổ sung khi cần }{value1, value2} type StructName struct { dataType1 dataType2 # Trường ẩn danh // Trường ẩn danh bổ sung }

 

Anonymous Structures in Go

Anonymous structures in Go are defined without a name and are useful for creating temporary, disposable structures. Here is the syntax and code example.

Syntax:

variable := struct { field1 dataType1 field2 dataType2 // Các trường bổ sung khi cần }{value1, value2}

For example:

package main import "fmt" // Cấu trúc sinh viên với cấu trúc bên trong ẩn danh cho thông tin cá nhân type Student struct { personalDetails struct { // Cấu trúc ẩn danh bên trong cho thông tin cá nhân name string enrollment int } GPA float64 // Trường chuẩn } func main() { // Khởi tạo cấu trúc bên trong cho student student := Student{ personalDetails: struct { name string enrollment int }{ name: "A", enrollment: 12345, }, GPA: 3.8, } // Hiện giá trị fmt.Println("Name:", student.personalDetails.name) fmt.Println("Enrollment:", student.personalDetails.enrollment) fmt.Println("GPA:", student.GPA) } 

Result:

Name: A Enrollment: 12345 GPA: 3.8

This code defines a Student structure with an anonymous personalDetails structure inside, storing the name and registration information. It then initializes student with values ​​for these fields and prints them out.

 

Anonymous fields

Anonymous fields in Go allow you to define fields without explicit names, only their types. This is useful when fields naturally follow the type name.

Syntax

type StructName struct { dataType1 dataType2 // Additional anonymous fields }

For example:

package main import "fmt" // Cấu trúc học sinh bằng các trường ẩn danh type Student struct { int // Số đăng ký (trường ẩn danh) string // Tên trường ẩn danh float64 // GPA (trường ẩn danh) } func main() { // Khởi tạo struct học sinh với các trường ẩn danh student := Student{12345, "A", 3.8} // Hiện giá trị fmt.Println("Enrollment:", student.int) fmt.Println("Name:", student.string) fmt.Println("GPA:", student.float64) } 

Result:

Enrollment: 12345 Name: A GPA: 3.8

Here, the data types ( int, string, float64 ) act as field names, so accessing the values ​​depends on the types.

Important Points to Remember About Anonymous Fields in Golang

1. Unique requirement: You cannot use two fields of the same type in a structure. For example:

type InvalidStudent struct { int int // Error: duplicate type }

2. Combining named and anonymous fields: You can combine anonymous and named fields in a structure.

type Student struct { id int // Named field int // Anonymous field }
Update 26 May 2025