*Neden bir Arayüz için' *bir Yapı biçerim t?
Sadece Go tour ile çalışıyorum ve işaretçileri ve ARAYÜZLERİ hakkında kafam karıştı. Neden bu kod derleme gitmiyor?
package main
type Interface interface {}
type Struct struct {}
func main() {
var ps *Struct
var pi *Interface
pi = ps
_, _ = pi, ps
}
Struct
yani Interface
neden *Struct
olmaz *Interface
?
Aldığım hata mesajı:
prog.go:10: cannot use ps (type *Struct) as type *Interface in assignment:
*Interface is pointer to interface, not interface
CEVAP
Bir yapı arabirim uygulama varsa, bu yapı için bir işaretçi otomatik olarak arayüzü de uygular. Bu yüzden asla sahip *SomeInterface
prototip fonksiyonları, bu olmaz bir şey eklemek için SomeInterface
, ve sana ihtiyacım yok böyle bir tipi değişken tanımlaması (bkz: this related question).
Bir arabirim değeri yok değeri beton yapı olarak bir değişken boyutu, bu olmaz Olası), ama bir tür işaretçi (daha kesin bir işaretçi yapı ve bir işaretçi türü). Russ Cox tam olarak here açıklar :
Arayüz değerleri iki kelimelik bir çifti veren bir işaretçi olarak temsil edilir bu tip arabirim saklanan hakkında bilgi için bir işaretçi ilişkili veri.
Bu Interface
*Interface
yapı Interface
uygulama için bir işaretçi tutmak için doğru türde olmasıdır.
Sadece kullanmanız gerekir
var pi Interface
Neden't bir yapı için varsayılan ...
Neden Arayüz kullanıyor muyuz? Sadece ...
Bir yapı c otomatik özelliklerini kull...
Sıcak tuşları bazen değişim, özellikle...
Neden char[] şifreler için Dize Java t...