Capisco che se il codice go è strutturato in modo tale da essere programmato per le interfacce, è banale prendersi gioco; tuttavia, sto lavorando con un codice base che non posso cambiare (non è il mio) e non è questo il caso.patching scimmia Golang
Questo codice base è fortemente interconnesso e nulla è programmato su un'interfaccia, solo strutture, quindi nessuna iniezione di dipendenza.
Le strutture, di per sé, contengono solo altre strutture, quindi non posso neanche prendere in giro in quel modo. Non credo di poter fare nulla sui metodi, e le poche funzioni esistenti non sono variabili, quindi non c'è modo che io sappia scambiarle. L'ereditarietà non è una cosa in golang, quindi è un no go pure.
In linguaggi di scripting come python, possiamo modificare gli oggetti in fase di runtime, ovvero patch di scimmia. C'è qualcosa di paragonabile che posso fare a golang? Cercando di capire in qualche modo di testare/benchmark senza toccare il codice sottostante.
Voglio assicurarmi che sto capendo correttamente questo. Stai suggerendo di definire una struttura che tenga conto di qualsiasi struttura con cui ho a che fare. Definire metodi su detta struct appena introdotta che chiamano i metodi della struct wrapped. Definisci un'interfaccia sulla struttura del wrapper, quindi prendi in giro in modo selettivo qualsiasi sottogruppo della logica sottostante che deve essere sbeffeggiata? Se la mia interpretazione è corretta, sembra che dovrei semplicemente riscrivere tutto il codice dato che è così intrecciato. Forse c'è da aspettarsi - immagino che non ci possa essere un'alternativa. –
Questo, per quanto sfortunato, è esattamente ciò che sto suggerendo. – sberry
Non è necessario chiamare/simulare i metodi che non è necessario sovrascrivere. Immetti il tipo originale all'interno del tuo tipo, che promuove i metodi, quindi escludi solo i metodi che desideri: https://play.golang.org/p/oHW1JX8iFb – elithrar