Phương thức được khuyến khích trong Golang

Trong cấu trúc Golang, cách thức hoạt động của các phương thức được khuyến khích cũng giống như các trường được khuyến nghị. Chúng ta sử dụng khái niệm này trong cấu trúc lồng nhau, trong đó một cấu trúc là một trường trong một cấu trúc khác, chỉ cần thêm tên của cấu trúc vào một cấu trúc khác và nó hoạt động giống như trường ẩn danh đối với cấu trúc lồng nhau. Các phương thức của cấu trúc đó (khác với cấu trúc lồng nhau) là một phần của cấu trúc lồng nhau, loại phương thức như vậy được gọi là các phương thức được thúc đẩy. Hay nói cách khác, các phương thức được nhắc là các phương thức được triển khai bởi cấu trúc con và có thể truy cập được bởi cấu trúc cha.

Trường được khuyến nghị trong Golang

Các điểm quan trọng cần ghi nhớ:

  1. Nếu cấu trúc con và cấu trúc cha chứa một phương thức có cùng tên nhưng khác loại receiver, thì cả hai phương thức đều có sẵn trong cấu trúc cha như được hiển thị ở Ví dụ 2. Ở đây, cả cấu trúc con và cấu trúc cha đều chứa các phương thức có cùng tên.
  2. Nếu cấu trúc con chứa hai phương thức có cùng tên và cùng receiver, thì các phương thức này không được quảng bá trong cấu trúc cha và nếu thử thực hiện, thì trình biên dịch sẽ báo lỗi.

Ví dụ 1:

// Chương trình Go minh họa 
// khái niệm các phương thức được khuyến khích
package main

import "fmt"

// Cấu trúc
type details struct {

    // Trường 
    // cấu trúc chi tiết
    name    string
    age     int
    gender  string
    psalary int
}

// Cấu trúc lồng nhau
type employee struct {
    post string
    eid  int
    details
}

// Phương thức
func (d details) promotmethod(tsalary int) int {
    return d.psalary * tsalary
}

func main() {

    // Khởi tạo các trường của
    // cơ cấu nhân viên
    values := employee{
        post: "HR",
        eid:  4567,
        details: details{

            name:    "Sumit",
            age:     28,
            gender:  "Male",
            psalary: 890,
        },
    }

    // Các trường được khuyến khích của
    // cơ cấu nhân viên
    fmt.Println("Name: ", values.name)
    fmt.Println("Age: ", values.age)
    fmt.Println("Gender: ", values.gender)
    fmt.Println("Per day salary: ", values.psalary)

    // Phương thức được khuyến nghị của
    // cơ cấu nhân viên
    fmt.Println("Total Salary: ", values.promotmethod(30))

    // Các trường bình thường của
    // cơ cấu nhân viên
    fmt.Println("Post: ", values.post)
    fmt.Println("Employee id: ", values.eid)
}

Kết quả:

Name:  Sumit
Age:  28
Gender:  Male
Per day salary:  890
Total Salary:  26700
Post:  HR
Employee id:  4567

Ví dụ 2:

// Chương trình Go minh họa
// khái niệm của phương thức được khuyến nghị
package main

import "fmt"

// Cấu trúc
type details struct {

    // Các trường của
    // cấu trúc chi tiết
    name    string
    age     int
    gender  string
    psalary int
}

// Phương thức 1
func (e employee) promotmethod(tarticle int) int {
    return e.particle * tarticle
}

// Cấu trúc lồng nhau
type employee struct {
    post     string
    particle int
    eid      int
    details
}

// Phương thức 2
func (d details) promotmethod(tsalary int) int {
    return d.psalary * tsalary
}

// Phương thức chính
func main() {

    // Khởi tạo các trường của
    // cơ cấu nhân viên
    values := employee{
        post:     "HR",
        eid:      4567,
        particle: 5,
        details: details{

            name:    "Sumit",
            age:     28,
            gender:  "Male",
            psalary: 890,
        },
    }

    // Các trường được khuyến nghị
    // cơ cấu nhân viên
    fmt.Println("Name: ", values.name)
    fmt.Println("Age: ", values.age)
    fmt.Println("Gender: ", values.gender)
    fmt.Println("Per day salary: ", values.psalary)

    // Phương thức được khuyến nghị
    // cơ cấu nhân viên
    fmt.Println("Total Salary: ", values.details.promotmethod(30))

    // Các trường bình thường của
    // cơ cấu nhân viên
    fmt.Println("Post: ", values.post)
    fmt.Println("Employee id: ", values.eid)
    fmt.Println("Total Articles: ", values.promotmethod(30))
}

Kết quả:

Name:  Sumit
Age:  28
Gender:  Male
Per day salary:  890
Total Salary:  150
Post:  HR
Employee id:  4567
Total Articles:  150
Thứ Sáu, 02/05/2025 09:28
51 👨 83
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