Git arayüzleri bazı örnekler nelerdir?

oy
6

Bulduğum ilginç bir blog yazısı Go hakkında.

Ben arayüzler kavramını anlamaya çalışıyorum, ama çok sert kod blog yazısında fragmanı ve neredeyse imkansız gelen bunu bulmak dil şartname .

Herkes bir çalışma programına Go arayüzleri basit bir örnek gösterebilir misiniz?

Oluştur 14/11/2009 saat 15:07
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
0

Go arayüzlerin temel kavramı, bir usulün uygulanması, herhangi bir nesne bir arabirim tanımlanan, bu arabirim bir parçası olabilir olup.

En iyi örnek Yazar arayüzüdür. Rob Pike, Google Tech Konuş (yaptığı intro konuşmada Bunun bir örneğini vardır http://www.youtube.com/watch?v=rKnDgT73v8s ) - yaptığı açıklama için konuşma içine 33:25 ilerleyin.

Cevap 14/11/2009 saat 15:17
kaynak kullanıcı

oy
4

Bu bir iş-içinde-ilerleme öğrenme egzersiz ve kesinlikle iyi stil kötü bir örnek, ama buyur ( Spec ).

Ayrıca, bir daha egzotik bir örnek olarak, yaptığım bir yazı (bu örnekte, bir "üçlü operasyon" fonksiyonu olarak) anonim verilerle çalışmak bina fonksiyonları için arayüz {} kullanarak ilgili go-fındık posta listesinde:

package main
import "fmt";
func Tern(exp bool, a interface{}, b interface{}) (interface{}) {
    if exp { return a }
    return b
}
func main() {
    a := 7; b := 1;
    result := Tern(a > b, a, b);
    fmt.Printf("%d\n", result);
}
Cevap 14/11/2009 saat 15:24
kaynak kullanıcı

oy
2
package main

type Stringer interface {
    String() string
}

type pie int
type pizza string

func (p pie) String() string{
    return "pie"
}

func (p pizza) String() string{
    return "pizza"
}

func main(){
    var a pie
    var b pizza
    fmt.Println(a,b) //fmt.Println() will look for Stringers and call their String() method.
}
Cevap 16/02/2011 saat 20:56
kaynak kullanıcı

oy
3

Öğretici " Go arayüzler - Bölüm 2: uyarlanabilir, evrimsel tasarım Sanıklarına " (Ocak 2012 den Sathish VJ ) açık bir şekilde Go arayüzleri için ana avantajı bahseder:

Go arayüzleri onlar çok daha konum, Java veya C # arayüzleri üzerinde bir varyant değildir.
Bunlar büyük ölçekli programlama ve uyarlanabilir, evrimsel tasarım için bir anahtardır .

Bir otobüs için farklı bir bakış açısı (arabirim) yaklaşık aynı maddenin gelen bu örneği aşağıda verilmiştir:

package main

import "fmt"

//Go Step 1: Define your data structures
type Bus struct {
    l, b, h int
    rows, seatsPerRow int
}

//Go Step 2: Define a real world abstraction that could use the data we structure we have
type Cuboider interface {
    CubicVolume() int
}

//Go Step 3: Implement methods to work on data
func (bus Bus) CubicVolume() int {
    return bus.l *  bus.b * bus.h
}

//Go step - repeat 2 & 3 for any other interfaces
type PublicTransporter interface  {
    PassengerCapacity() int
}

func (bus Bus) PassengerCapacity() int {
    return bus.rows * bus.seatsPerRow
}

func main() {
    b := Bus{
             l:10, b:6, h:3,
             rows:10, seatsPerRow:5}

    fmt.Println("Cubic volume of bus:", b.CubicVolume())
    fmt.Println("Maximum number of passengers:", b.PassengerCapacity())
}

Veri merkezli olarak görünmektedir - ilk veri tanımlamak ve geçinmek gibi arayüz soyutlamalar kurmak.
Türüyle ilişkili yöntem imzaları bağlı olarak, belirli arabirimleri uygulayan olarak anlaşılmaktadır - burada Hiyerarşi tür açıkça belirtmeden 'yol boyunca' inşa edilmiştir.

Şimdi gelişti süre olarak, bizim Otobüs proje gereksinimleri bazı değişmiş olduğunu farzedelim - Her yolcu en az küp hacmi belirli bir asgari miktarda sahip olacağını öne sürüyor yeni bir yasa şimdi var.
Bizim otobüs şimdi adı verilen yeni bir arayüz uyması gereken PersonalSpaceLawdiğer arayüzleri zaten uygular herhangi ayrıdır

//new requirement that the Bus must be compatible with
type PersonalSpaceLaw interface {
    IsCompliantWithLaw() bool
}

func (b Bus) IsCompliantWithLaw() bool {
    return (b.l * b.b * b.h) / (b.rows * b.seatsPerRow) >= 3
}

işlevsellik çekirdek sınıfları veya çekirdek hiyerarşileri için herhangi bir değişiklik olmaksızın uzatıldı. Bu uygulama kolayca genişletilebilir, daha temiz ve projenin gereksinimleri değişen ihtiyaçları ile daha iyi ölçeklenebilir.

İşte Go Oyun alanı tam çalışır programı

makale Go arayüzleri verimlilik konusunda iplikten John Asmuth en alıntı ile sona erer:

"Ben ön tip hiyerarşisi çeşit tasarımı ve sonra bitirmeden o iki veya üç kez yeniden düzenleyerek kadar zaman harcamak zorunda kalmamasıdır gerçektir.
O doğru yapmak çok kolay olması bile değil -
bir bakıma bu işte sadece bu konuda endişelenmenize gerek yok ve gerçek algoritması ile ilgili alabilirsiniz. "

Cevap 01/08/2012 saat 05:13
kaynak kullanıcı

oy
0

Vikipedi ördek yazarak açıklar ve Go bir örneği vardır. http://en.wikipedia.org/wiki/Duck_typing

Cevap 09/06/2013 saat 18:21
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more