Hàm là trường trong Golang

Trong Golang, bạn có thể định nghĩa các hàm như các trường trong một cấu trúc (struct). Tính năng này cho phép bạn liên kết hành vi (phương thức) trực tiếp với các kiểu dữ liệu, cho phép quản lý dữ liệu và các hoạt động liên quan theo cách có tổ chức và đóng gói hơn.

Hàm làm trường trong Golang

Ví dụ:

package main
import "fmt"
// Định nghĩa một cấu trúc chưa hàm làm trương
type Person struct {
    Name  string
    Greet func() string
}
func main() {
    person := Person{
        Name: "A",
    }
    // Gán một chức năng cho trường Chào hỏi sau khi người được xác định
    person.Greet = func() string {
        return "Hello, " + person.Name
    }
    // Gọi trường hàm
    fmt.Println(person.Greet())
}

Cú pháp của hàm dưới dạng trường trong Golang

type StructName struct {
    Field1 FieldType
    FunctionField func() ReturnType
}

Cấu trúc với phương thức dưới dạng trường hàm

Bạn cũng có thể định nghĩa một struct method hoạt động như một trường hàm. Điều này cho phép struct có hành vi được liên kết trực tiếp với nó.

Cú pháp

type StructName struct {
    Field1 FieldType
    MethodField func() ReturnType
}

Ví dụ:

package main
import "fmt"
type Person struct {
    Name  string
    Greet func() string
}
func main() {
    person := Person{
        Name: "A",
    }
    // Gán chức năng chào hỏi sau khi người đó được xác định
    person.Greet = func() string {
        return "Hello, " + person.Name
    }
    // Gọi trường hàm
    fmt.Println(person.Greet())
}

Kết quả:

Hello, A

Cấu trúc với Trường hàm tham số

Bạn có thể định nghĩa một trường hàm chấp nhận tham số, cung cấp tính linh hoạt hơn trong cách hàm hoạt động.

Cú pháp

type StructName struct {
    Field1 FieldType
    MethodField func(param1 ParamType) ReturnType
}

Ví dụ:

package main
import "fmt"
type Person struct {
    Name  string
    Greet func(string) string
}
func main() {
    person := Person{
        Name: "B",
    }
    // Gán hàm greet sau khi xác định được người
    person.Greet = func(greeting string) string {
        return greeting + ", " + person.Name
    }
    // Gọi trường hàm bằng 1 tham số
    fmt.Println(person.Greet("Hi"))
}

Kết quả:

Hi, B

Cấu trúc với các trường đa hàm

Bạn cũng có thể định nghĩa nhiều trường hàm trong một struct duy nhất để đóng gói nhiều hành vi khác nhau.

Cú pháp

type StructName struct {
    Field1 FieldType
    MethodField1 func() ReturnType
    MethodField2 func(param1 ParamType) ReturnType
}

Ví dụ:

package main
import "fmt"
type Person struct {
    Name     string
    Greet    func(string) string
    Farewell func() string
}
func main() {
    person := Person{
        Name: "C",
    }
    // Gane hàm greet và farewell sau khi xác định người
    person.Greet = func(greeting string) string {
        return greeting + ", " + person.Name
    }
    person.Farewell = func() string {
        return "Goodbye, " + person.Name
    }
    // Gọi các trường hàm
    fmt.Println(person.Greet("Hello"))
    fmt.Println(person.Farewell())
}

Kết quả:

Hello, C
Goodbye, C
Thứ Hai, 05/05/2025 09:50
51 👨 101
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖
    Chia sẻ
    Chia sẻ FacebookChia sẻ Twitter
    Đóng