Pergunta
Golang Inicialização Descreve uma maneira de anexar métodos ao objeto arbitrário na linguagem de programação GO. Como exemplo, eles mostram um String
método para um recém -definido ByteSize
modelo:
type ByteSize float64
const (
_ = iota; // ignore first value by assigning to blank identifier
KB ByteSize = 1<<(10*iota);
MB;
GB;
TB;
PB;
YB;
)
A capacidade de anexar um método como string a um tipo possibilita que esses valores se formem automaticamente para impressão, mesmo como parte de um tipo geral.
func (b ByteSize) String() string {
switch {
case b >= YB:
return fmt.Sprintf("%.2fYB", b/YB)
case b >= PB:
return fmt.Sprintf("%.2fPB", b/PB)
case b >= TB:
return fmt.Sprintf("%.2fTB", b/TB)
case b >= GB:
return fmt.Sprintf("%.2fGB", b/GB)
case b >= MB:
return fmt.Sprintf("%.2fMB", b/MB)
case b >= KB:
return fmt.Sprintf("%.2fKB", b/KB)
}
return fmt.Sprintf("%.2fB", b)
}
O que não está claro para mim é o seguinte: se ByteSize
e func (b ByteSize) String() string
são definidos em um pacote em algum lugar, eu importo esse pacote, mas quero personalizar a exibição de ByteSize
Ao escrever usando meu próprio método de string, como sabe se deve chamar meu próprio método de string ou o método de string definido anteriormente? É possível redefinir a corda?
Solução
A intenção é que você envolva um tipo se quiser novos métodos, então você definiria
type MyByteSize ByteSize
func (b MyByteSize) String() string{
}
Você não pode definir métodos em um tipo fora do módulo que foi definido, acredito.