SORU
22 Kasım 2012, PERŞEMBE


*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
22 Kasım 2012, PERŞEMBE


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.

enter image description here

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ownage Pranks

    Ownage Prank

    13 AĞUSTOS 2007
  • Techmoan

    Techmoan

    31 Mayıs 2009
  • tsweeney79

    tsweeney79

    21 Ocak 2008