سؤال
جولانغ التهيئة يصف طريقة لإرفاق الأساليب إلى الكائن التعسفي في لغة 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{
}
لا يمكنك تحديد الأساليب بنوع خارج الوحدة التي تم تعريفها وأعتقد ذلك.