سؤال

جولانغ التهيئة يصف طريقة لإرفاق الأساليب إلى الكائن التعسفي في لغة Go Programming. كمثال، فهم يظهرون String طريقة محددة حديثا ByteSize يكتب:

type ByteSize float64
const (
    _ = iota;   // ignore first value by assigning to blank identifier
    KB ByteSize = 1<<(10*iota);
    MB;
    GB;
    TB;
    PB;
    YB;
)

إن القدرة على إرفاق طريقة مثل السلسلة إلى النوع تجعل من الممكن هذه القيم لتنسيق نفسها تلقائيا للطباعة، حتى كجزء من نوع عام.

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)
}

ما لم يكن واضحا بالنسبة لي هو ما يلي: إذا ByteSize و func (b ByteSize) String() string كلاهما محدد في حزمة في مكان ما، وأنا استيراد هذه الحزمة ولكنك ترغب في تخصيص عرض ByteSize عن طريق الكتابة باستخدام طريقة السلسلة الخاصة بي، كيف تعرف معرفة ما إذا كنت تريد استدعاء طريقة السلسلة الخاصة بي أو طريقة السلسلة المحددة مسبقا؟ هل من الممكن إعادة تعريف السلسلة؟

هل كانت مفيدة؟

المحلول

القصد هو لفك نوع إذا كنت تريد طرقا جديدة على ذلك، لذلك ستحدد

type MyByteSize ByteSize
func (b MyByteSize) String() string{

}

لا يمكنك تحديد الأساليب بنوع خارج الوحدة التي تم تعريفها وأعتقد ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top