Sudah ada jawaban bagus di sini. Izinkan saya menambahkan milik saya juga untuk orang lain yang ingin memahaminya secara intuitif:
Antarmuka
Berikut ini antarmuka dengan satu metode:
type Runner interface {
Run()
}
Jadi tipe apa pun yang memiliki Run()
metode memenuhi antarmuka Runner:
type Program struct {
/* fields */
}
func (p Program) Run() {
/* running */
}
func (p Program) Stop() {
/* stopping */
}
Meskipun tipe Program juga memiliki metode Stop, masih memenuhi antarmuka Runner karena semua yang diperlukan adalah memiliki semua metode antarmuka untuk memuaskannya.
Jadi, ia memiliki metode Jalankan dan memenuhi antarmuka Runner.
Antarmuka Kosong
Inilah antarmuka kosong bernama tanpa metode apa pun:
type Empty interface {
/* it has no methods */
}
Jadi jenis apa pun memenuhi antarmuka ini. Karena, tidak diperlukan metode untuk memuaskan antarmuka ini. Sebagai contoh:
// Because, Empty interface has no methods, following types satisfy the Empty interface
var a Empty
a = 5
a = 6.5
a = "hello"
Tetapi, apakah tipe Program di atas memuaskan? Iya:
a = Program{} // ok
antarmuka {} sama dengan antarmuka Kosong di atas.
var b interface{}
// true: a == b
b = a
b = 9
b = "bye"
Seperti yang Anda lihat, tidak ada yang misterius tentang itu tetapi sangat mudah disalahgunakan. Jauhi itu sebanyak yang Anda bisa.
https://play.golang.org/p/A-vwTddWJ7G
interface{}
kurang lebih sama denganvoid *
di C. Itu bisa menunjuk ke apa pun dan Anda membutuhkan pernyataan cor / tipe untuk menggunakannya.