Interfaces in Go are a set of methods that defines a behavior. A type can implement an interface by defining methods with the same signatures as the methods defined in the interface. This allows for a form of polymorphism in Go, where a single function or method can operate on values of different types, as long as those types implement the required interface.

One of the key concepts of interfaces in Go is that they are implicitly satisfied, meaning that a type does not need to explicitly state that it implements an interface. If a type has methods with the same signatures as the methods defined in an interface, it is considered to implement the interface.

Here’s a simple example that demonstrates the basic concepts of interfaces in Go:


package main

import "fmt"

// The Printer interface defines the behavior for a type that can print itself.
type Printer interface {
    Print()
}

// The Rectangle type implements the Printer interface by defining the Print method.
type Rectangle struct {
    width, height int
}

func (r Rectangle) Print() {
    fmt.Printf("Rectangle: width=%d, height=%d\n", r.width, r.height)
}

// The Circle type implements the Printer interface by defining the Print method.
type Circle struct {
    radius int
}

func (c Circle) Print() {
    fmt.Printf("Circle: radius=%d\n", c.radius)
}

func main() {
    // Create a slice of Printer values.
    shapes := []Printer{Rectangle{2, 3}, Circle{4}}

    // Loop over the slice of Printer values and call the Print method for each value.
    for _, shape := range shapes {
        shape.Print()
    }
}


In this example, we define an interface called Printer that has a single method, Print. We then define two types, Rectangle and Circle, that implement the Printer interface by defining the Print method.

In the main function, we create a slice of Printer values and loop over the slice, calling the Print method for each value. Since both the Rectangle and Circle types implement the Printer interface, we can store values of both types in a single slice of Printer values.

This example demonstrates the key concepts of interfaces in Go, including how to define an interface, how to implement an interface, and how to use values of different types in a single slice, as long as those types implement the required interface.

Interfaces in Go provide a powerful way to define behavior that can be shared across different types, and they are a fundamental part of the Go programming language. By understanding the basic concepts of interfaces, Go programmers can build more flexible and reusable code, and write programs that are more easily maintainable and scalable.

More knowledge keyword on Go Interface

Object-Oriented Design (OOD)
Procedural programming
Protocol-Oriented Programming (POP)

About the Author

Trần Huy

View all author's posts

Bài viết khác

Go Struct

Go Struct là gì? Struct trong Go là một kiểu dữ liệu tổng hợp, cho phép bạn nhóm các giá trị có kiểu dữ liệu khác nhau vào một đơn vị duy nhất. Struct có thể được so sánh với các lớp (class) trong lập trình hướng đối tượng, nhưng Go không hỗ trợ kế […]

Go Routine

Go Routine là gì? Là một trong những tính năng đặc biệt nhất của Golang để lập trình Concurrency cực kỳ đơn giản. Goroutine bản chất là các hàm (function) hay method được thực thi một các độc lập và đồng thời nhưng vẫn có thể kết nối với nhau. Một cách ngắn gọn, những thực thi đồng thời được gọi là Goroutines […]

Go Package

Go Package  là gì? Là tập hợp các file trong cùng một thư mục, hướng tới xử lí một tập hợp các vấn đề có liên quan đến thứ mà Package đó hướng tới, ví dụ, trong thư mục user của mình mình có 3 file .go cùng xử lí các vấn đề liên quan […]

Go Modules

Go Modules là gì? Go Modules là hệ thống quản lý phụ thuộc (dependency management) và phiên bản (versioning) của các thư viện hoặc gói (packages) trong Go. Được giới thiệu từ phiên bản Go 1.11 và trở thành công cụ chính thức trong Go 1.13, Go Modules giúp lập trình viên quản lý các […]

GoLang

GoLang là gì? Golang là một ngôn ngữ lập trình mã nguồn mở do Google phát triển, ngôn ngữ này được thiết kế với mục tiêu tạo ra một ngôn ngữ dễ học, hiệu quả và có khả năng mở rộng cho các phần mềm hệ thống lớn. Go (Golang) còn được biết đến là một […]

Use docker to run go project

Docker is a powerful tool that enables developers to create, deploy and run applications in a containerized environment. Using Docker to run Go projects has many advantages, including the ability to isolate your application from the underlying operating system, simplifying the deployment process, and allowing for greater scalability and flexibility. In this guide, we will […]