Học Go cấp tốc Phần 5: Methods và Interfaces



  • Các phần trước:

    Phần 1: Packages, variables và functions.

    Phần 2: Điều khiển luồng với if, else, switch và defer.

    Phần 3: Arrays và Slices.

    Phần 4: Structs và Maps.

     

    Methods

    Trong Go không có class, chúng ta có thể dùng struct thay cho class như ở phần trước. Tuy nhiên trong struct mới chỉ có thuộc tính chứ chưa có phương thức. Để ứng dụng được phương thức (method) như các ngôn ngữ hướng đối tượng khác ta sẽ cần khai báo function kèm theo một tham số đặc biệt gọi là receiver argument. Receiver argument nằm ở giữa từ khóa func tên của function, nó sẽ chỉ ra một type (thường là một struct) để áp dụng hàm này làm phương thức. Ví dụ: 

    package main
    
    import (
        "fmt"
        "math"
    )
    
    // Định nghĩa struct Vertex với 2 thuộc tính X và Y
    type Vertex struct {
        X, Y float64
    }
    
    // Tạo phương thức Abs() cho struct Vertex (receiver argument)
    func (v Vertex) Abs() float64 {
        return math.Sqrt(v.X*v.X + v.Y*v.Y)
    }
    
    func main() {
        // Khởi tạo struct
        v := Vertex{3, 4}
    
        // Gọi phương thức Abs() của struct
        fmt.Println(v.Abs())
    }
    
     

    Interfaces

    - Interface là một định nghĩa các tập hợp phương thức mà một đối tượng cần tuân thủ (tương tự như ở trong các ngôn ngữ hướng đối tượng khác). Khi một type có chứa các phương thức như đã khai báo trong interface thì nó đang triển khai (implement) interface đó. Ví dụ: 
    package main
    
    import "fmt"
    
    // Định nghĩa interface I với 1 method là M()
    type I interface {
        M()
    }
    
    // Định nghĩa struct T với 1 field là S kiểu string
    type T struct {
        S string
    }
    
    // Định nghĩa phương thức M() cho struct T
    // Struct T sẽ tự động implement interface I
    func (t T) M() {
        fmt.Println(t.S)
    }
    
    func main() {
        // Khởi tạo biến i có kiểu là interface I
        var i I = T{"hello"}
    
        // Gọi phương thức M()
        i.M()
    }
    

     

    Type đã triển khai interface buộc phải có đầy đủ các method được định nghĩa trong interface. Ví dụ: 

    package main
    
    import "fmt"
    
    // Định nghĩa interface I với 1 method là M() và N()
    type I interface {
        M(),
        N()
    }
    
    // Định nghĩa struct T
    type T struct {
        S string
    }
    
    // Định nghĩa phương thức M() cho struct T
    // Struct T sẽ tự động implement interface I
    func (t T) M() {
        fmt.Println(t.S)
    }
    
    func main() {
        // Khởi tạo biến i có kiểu là interface I
        var i I = T{"hello"}
    
        // Gọi phương thức M()
        i.M()
    
        // Kết quả sẽ báo lỗi vì struct T implement interface I,
        // nhưng không có đủ các method đã khai báo (thiếu method N())
    }
    

     

     

    Series Học Go cấp tốc sẽ tạm dừng ở đây. Mục đích là để các bạn làm quen và nắm được tổng quan của ngôn ngữ Go. Sẽ có một Series khác hướng dẫn chi tiết hơn về lập trình Golang dành cho những ai muốn tìm hiểu sâu hơn để áp dụng vào công việc thực tế.
    Happy coding 😎

Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới LaptrinhX, vui lòng đợi một lúc để chúng tôi thử kết nối lại.