Burada zaten iyi cevaplar var. Bunu sezgisel olarak anlamak isteyenler için de kendiminkini ekleyeyim:
Arayüz
İşte tek yöntemli bir arayüz:
type Runner interface {
Run()
}
Dolayısıyla, bir Run()
yöntemi olan herhangi bir tür , Runner arayüzünü karşılar:
type Program struct {
/* fields */
}
func (p Program) Run() {
/* running */
}
func (p Program) Stop() {
/* stopping */
}
Program türünün ayrıca bir Durdurma yöntemi olmasına rağmen, yine de Runner arabirimini karşılar çünkü gereken tek şey, onu tatmin etmek için bir arabirimin tüm yöntemlerine sahip olmaktır.
Yani, bir Run metoduna sahip ve Runner arayüzünü tatmin ediyor.
Boş Arayüz
Herhangi bir yöntem içermeyen adlandırılmış boş bir arabirim:
type Empty interface {
/* it has no methods */
}
Yani her tür bu arayüzü karşılar. Çünkü bu arayüzü sağlamak için hiçbir yönteme ihtiyaç yoktur. Örneğin:
// Because, Empty interface has no methods, following types satisfy the Empty interface
var a Empty
a = 5
a = 6.5
a = "hello"
Ancak yukarıdaki Program türü bunu karşılıyor mu? Evet:
a = Program{} // ok
arayüz {}, yukarıdaki Boş arayüze eşittir.
var b interface{}
// true: a == b
b = a
b = 9
b = "bye"
Gördüğünüz gibi, gizemli bir yanı yok ama kötüye kullanılması çok kolay. Olabildiğince ondan uzak dur.
https://play.golang.org/p/A-vwTddWJ7G
interface{}
az ya da çok eşdeğerdirvoid *
C. Herhangi bir şey işaret edebilir ve bunu kullanmak için bir döküm / tür iddiasını gerekir.