ในGolangโครงสร้าง (หรือ structs) ช่วยให้เราสามารถจัดกลุ่มองค์ประกอบประเภทต่างๆ เข้าเป็นหน่วยเดียว ซึ่งมีประโยชน์สำหรับการสร้างแบบจำลองเอนทิตีในโลกแห่งความเป็นจริงโครงสร้างที่ไม่ระบุชื่อใน Golang เป็นโครงสร้างชั่วคราวที่ไม่มีการใช้ชื่อเพื่อวัตถุประสงค์เพียงครั้งเดียว ในขณะที่ฟิลด์ที่ไม่ระบุชื่ออนุญาตให้ฝังฟิลด์ที่ไม่มีชื่อได้

ตัวอย่างเช่น:
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)
}
รูปแบบประโยค :
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
}
โครงสร้างที่ไม่ระบุชื่อใน Go
โครงสร้างที่ไม่ระบุชื่อใน Go ถูกกำหนดโดยไม่มีชื่อและมีประโยชน์ในการสร้างโครงสร้างแบบชั่วคราวและใช้แล้วทิ้ง ต่อไปนี้เป็นรูปแบบไวยากรณ์และตัวอย่างโค้ด
รูปแบบประโยค :
variable := struct {
field1 dataType1
field2 dataType2
// Các trường bổ sung khi cần
}{value1, value2}
ตัวอย่างเช่น:
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)
}
ผลลัพธ์:
Name: A
Enrollment: 12345
GPA: 3.8
โค้ดนี้กำหนด โครงสร้างนักเรียน โดยมี โครงสร้างpersonalDetails ที่ไม่ระบุชื่อ อยู่ภายใน ซึ่งเก็บชื่อและข้อมูลการลงทะเบียน จากนั้นให้ใส่ค่าเริ่มต้น ของฟิลด์เหล่านี้ให้กับ นักเรียนและพิมพ์ออกมา
เขตข้อมูลที่ไม่ระบุชื่อ
ฟิลด์ที่ไม่ระบุชื่อใน Go ช่วยให้คุณสามารถกำหนดฟิลด์โดยไม่ต้องมีชื่อชัดเจน แต่ระบุเฉพาะประเภทของฟิลด์เท่านั้น สิ่งนี้มีประโยชน์เมื่อฟิลด์เป็นไปตามชื่อประเภทโดยธรรมชาติ
ไวยากรณ์
type StructName struct {
dataType1
dataType2
// Additional anonymous fields
}
ตัวอย่างเช่น:
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)
}
ผลลัพธ์:
Enrollment: 12345
Name: A
GPA: 3.8
ที่นี่ ประเภทข้อมูล ( int, string, float64 ) ทำหน้าที่เป็นชื่อฟิลด์ ดังนั้นการเข้าถึงค่าจึงขึ้นอยู่กับประเภท
ประเด็นสำคัญที่ต้องจำเกี่ยวกับฟิลด์ที่ไม่ระบุชื่อใน Golang
1. ข้อกำหนดเฉพาะ:คุณไม่สามารถใช้ฟิลด์สองฟิลด์ที่มีประเภทเดียวกันในโครงสร้างเดียวได้ ตัวอย่างเช่น:
type InvalidStudent struct {
int
int // Error: duplicate type
}
2. การรวมฟิลด์ที่มีชื่อและไม่ระบุชื่อ:คุณสามารถรวมฟิลด์ที่ไม่ระบุชื่อและที่มีชื่อในโครงสร้างได้
type Student struct {
id int // Named field
int // Anonymous field
}