"Arayüzleri Kabul Et" kullanımdan kaldırma aracını kırıyor mu?

0

Soru

İtiraz

İşlevleri kullanımdan kaldırılmış olarak işaretlemenin desteklenen yolu şöyle bir şeydir:

type MyStruct struct {
}

// MyFunc returns hello
// Deprecated: Use YourFunc
func (m MyStruct) MyFunc() string {
  return "hello"
}

Modern ıde'ler bu işlevin herhangi bir kullanımını vurgulayacak ve linterler de uyarıları yükseltebilir (bunu kişisel olarak kontrol etmedim).

Showing the IDE highlight

Arayüzleri kabul et. Dönüş yapıları.

Popüler bir en iyi uygulama "Arayüzleri kabul et. Dönüş yapıları."- yazılımda sağlam tasarımı teşvik etme eğilimindedir.

Ancak, bu en iyi uygulamayı izleyen aşağıdaki kod kullanımdan kaldırma uyarısını gizler:


// MyInterface specifies a single function that we require from a dependency
type MyInterface interface {
    MyFunc() string
}

func main() {

    var v MyInterface
    v = MyStruct{}
    v.MyFunc()

}

Showing the lack of IDE highlighting

Soru

Bu sorun için bir çözüm var mı?

Örneğin bir kütüphane sorumlusu olsaydım: kullanımdan kaldırma uyarılarımın, en iyi uygulamaları takip eden ve kendi bağımlılık arayüzlerini tanımlayan kütüphane kullanıcıları tarafından görülmesini nasıl sağlayabilirim.

1

En iyi cevabı

3

Arayüz yöntemi kullanımdan kaldırılmadığından bu mantıklı görünüyor. Ekleme Deprecated: arabirim işlevine giden satır bu durumda yardımcı olabilir (VSCode bunu henüz yapmadığı için test edilmedi).

// MyInterface specifies a single function that we require from a dependency
type MyInterface interface {
    // Deprecated: use YourFunc
    MyFunc() string
}

Bu durumda, arabirimin yalnızca 1 işlevi olduğundan, her şeyi kullanımdan kaldırmanız gerekir. Bildiğim kadarıyla godoc / pkg tarafından destekleniyor.gitmek.dev, örneğin Queryer'ı ele alalım.

// MyInterface specifies a single function that we require from a dependency
// Deprecated: use YourInterface
type MyInterface interface {
    MyFunc() string
}
2021-11-22 21:18:36

Bir çekirdek yönlü bir soru, ancak, "olduğu gibi bir kütüphane yürüten, nasıl yapabilirim sağlamak benim admin fark olduğunu gördüm, son kullanıcılar?"Kütüphane sorumlusu, kullanıcının arayüz tanımları üzerinde hiçbir kontrole sahip değil, bu yüzden oraya ulaşamıyor ve kullanımdan kaldırma uyarıları ekleyemiyorlar.
Brad Johnson

Bir kütüphanenin bir yapı sağlaması ve kullanıcının kütüphanenin yapısının uyguladığı bir arayüz sağlaması bana garip geliyor. Bu, endişelendiğiniz bir senaryo ise, tüm yapınızı kullanımdan kaldırmak daha akıllıca olacaktır, bu da aşağıdakilere neden olmalıdır v = MyStruct{} kapılmış olmak için
caveman

"Bir kütüphanenin bir yapı sağlaması ve kullanıcının bir arayüz sağlaması bana garip geliyor..."Arayüz ayrımı ilkesinin teşvik ettiği şey bu değil mi?
Brad Johnson

Bildiğim kadarıyla, arayüz ayrımı ilkesi, büyük arayüzleri daha küçük arayüzlere ayırmakla ilgilidir, tıpkı "Arayüz ne kadar büyükse, soyutlama o kadar zayıf olur."git atasözü. Bağımlılık inversiyon ilkesinin burada daha fazla rol oynadığını düşünüyorum. Genellikle arabirimleri parametre olarak kullanmak istersiniz, böylece gerçek uygulama değiştirilebilir. Bu nedenle, bir pakette bir arabirim tanımlamak ve girdi olarak kullanmak mantıklıdır. Ancak, bir paketin kullanıcısının kütüphane yapısının örtük olarak uyguladığı bir arabirimi tanımladığı herhangi bir yaygın kullanım durumu bilmiyorum.
caveman

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................