Menu
CoddyTech

Định nghĩa phương thức cho struct

Thuộc phần Lập trình hướng đối tượng trong hành trình GO của Coddy. Bài học 7 trên 107.

Phương thức trong Go là các hàm có đối số receiver đặc biệt, liên kết hàm với một kiểu struct.

Cú pháp phương thức

func (receiverName StructType) MethodName() ReturnType {
    // thân phương thức
}

Định nghĩa một struct có các phương thức

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

Phương thức có tham số

func (r Rectangle) Scale(factor float64) float64 {
    return r.Area() * factor
}

Gọi phương thức

rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area())      // Đầu ra: 15
fmt.Println(rect.Perimeter()) // Đầu ra: 16
fmt.Println(rect.Scale(2))    // Đầu ra: 30

Receiver (r Rectangle) cho phép bạn truy cập các trường của struct bên trong phương thức bằng biến receiver r. Các phương thức có thể gọi những phương thức khác trên cùng một struct.

challenge icon

Thử thách

Trung bình

Thêm ba phương thức vào struct Circle:

  • Area: trả về math.Pi * radius * radius
  • Circumference: trả về 2 * math.Pi * radius
  • Describe: trả về một chuỗi: "Circle with radius X.XX"

Tự làm thử

package main

import "fmt"

func main() {
    var radius float64
    fmt.Scan(&radius)

    c := Circle{Radius: radius}

    fmt.Printf("Area: %.2f\n", c.Area())
    fmt.Printf("Circumference: %.2f\n", c.Circumference())
    fmt.Printf("Description: %s\n", c.Describe())
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Go online