Golang 1 - Interfaces - Giới thiệu
Interface là gì
Trong Go, interface là một tập hợp các method signatures. Khi một type định nghĩa tất cả các methods trong một interface, nó đợi nói là đã implemennt interface đó. Tương đương trong OOP, interface đinh nghĩa method type phải có, việc implement như thế nào phụ thuộc vào type
Declaring and implementing an interface
package main
import (
	"fmt"
)
//interface definition
type VowelsFinder interface {
	FindVowels() []rune
}
type MyString string
//MyString implements VowelsFinder
func (ms MyString) FindVowels() []rune {
	var vowels []rune
	for _, rune := range ms {
		if rune == 'a' || rune == 'e' || rune == 'i' || rune == 'o' || rune == 'u' {
			vowels = append(vowels, rune)
		}
	}
	return vowels
}
func main() {
	name := MyString("Sam Anderson")
	var v VowelsFinder
	v = name // possible since MyString implements VowelsFinder
	fmt.Printf("Vowels are %c", v.FindVowels())
}
Chương trình trên, chúng ta tạo một interface tên là VowelsFinder có duy nhất hàm FindVowels trả về []rune
Type MyString được tạo và add method FindVowels() []rune với 1 receiver type là MyString. Bây giờ chúng ta có thể nói MyString implement interface VowelFinder. Chúng ta có thể để ý thấy, khác với ngôn ngữ khác như Java, không có một khai báo tường minh nào. Đều đó không cần thiết trong Go, inteface trong Go đươc implement một cách không tường minh. Nếu một type có tất cả các hàm của interface, nó sẽ là một implement của interface đó.
Ứng dụng của interface.
Interface internal representation
Một interface có thể đại diện bằng một tuple (type, value). type là kiểu cụ thể của interface, và value là giá trị và type đang năm giữ.
Empty interface
Một interface không có method nào được gọi là empty interface, nó đại điện bởi interface{}. Vì empty interface không có method nào, mọi type đều implement empty interface.
Type assertion
i.(T) => lấy giá trị của interface i mà có type cụ thể là T.
