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

  • CareyHolzman

    CareyHolzman

    24 Ocak 2008
  • Megan Parken

    Megan Parken

    19 Temmuz 2009
  • Unbox Therapy

    Unbox Therap

    21 Aralık 2010