Bazen Go'nun açık doğasıyla mücadele eden eski bir python geliştiricisiyim. Bir yöntemi bir yapıdan bir arayüzün parçası olmak için taşıyabilmek için bazı kodları yeniden düzenlemeye çalışıyorum. Ama süreç bana garip geliyor, yanlış bir şey yapmadığımı doğrulamak istiyorum.
Aşağıdaki arayüzlere, yapıya ve yöntemlere sahibim:
type Executing interface {
Execute()
}
type MyExecuter struct {
attribut1 string
}
//The function I wish to move
func (exe1 *MyExecuter) format() string {
return fmt.sprintf ("formated : %s", exe1.attribut1)
}
func (exe1 *MyExecuter) Execute() {
//Executing
fmt.Println(exe.format())
}
func GetExecuter () Executer{
return MyExecuter{attribut1: "test"}
}
Yani burada genel bir arabirim Yürütmem var, bu arabirime GetExecuter yöntemi tarafından döndürülen nesne tarafından erişilecektir.
Şimdi, Yürütücülerimden birinin uygulanmasının bir parçası olarak, Biçim yöntemini bir arabirimin parçası olarak taşımak istiyorum.
Bu yüzden aşağıdakileri yapıyorum:
type Formatting interface {
format() string
}
type Formatter struct {}
func (formatter *Formatter) format(exe1 *MyExecuter) (string) {
return fmt.sprintf ("formated : %s", exe1.attribut1)
}
Bu yüzden yeni bir arayüz, yeni bir boş yapı oluşturuyorum ve önceki yapımı öznitelik olarak almak için işlevimi güncelliyorum.
Bu iş gibi görünüyor olsa da, benim için bu biraz kıvrık gibi görünüyor. Özellikle, ilk nesneme yöntemin özniteliği olarak bir başvuru eklemem gereken kısım. Burada yanlış bir şey mi yapıyorum yoksa doğru yol bu mu?