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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top