প্রিয় সহকর্মী বিকাশকারীগণ,
আমি এই সমস্যাটি পেয়েছি যা আমার কাছে কিছুটা অদ্ভুত বলে মনে হচ্ছে। কোডের এই স্নিপেটটি একবার দেখুন:
package coreinterfaces
type FilterInterface interface {
Filter(s *string) bool
}
type FieldFilter struct {
Key string
Val string
}
func (ff *FieldFilter) Filter(s *string) bool {
// Some code
}
type FilterMapInterface interface {
AddFilter(f *FilterInterface) uuid.UUID
RemoveFilter(i uuid.UUID)
GetFilterByID(i uuid.UUID) *FilterInterface
}
type FilterMap struct {
mutex sync.Mutex
Filters map[uuid.UUID]FilterInterface
}
func (fp *FilterMap) AddFilter(f *FilterInterface) uuid.UUID {
// Some code
}
func (fp *FilterMap) RemoveFilter(i uuid.UUID) {
// Some code
}
func (fp *FilterMap) GetFilterByID(i uuid.UUID) *FilterInterface {
// Some code
}
অন্য কিছু প্যাকেজে আমার কাছে নিম্নলিখিত কোড রয়েছে:
func DoFilter() {
fieldfilter := &coreinterfaces.FieldFilter{Key: "app", Val: "152511"}
filtermap := &coreinterfaces.FilterMap{}
_ = filtermap.AddFilter(fieldfilter) // <--- Exception is raised here
}
রান-টাইম উল্লেখ করা লাইনটি গ্রহণ করবে না কারণ
"ফিল্ডিল্ট ফিল্ডিল্টার (টাইপ * কোরিনেটারফেসস.ফিল্ডফিল্টার) টাইপ * কোরিনেটারফেসগুলি ব্যবহার করতে পারবেন না। ফিল্ডিন্টের যুক্তিতে ফিল্টারইন্টারফেস। অ্যাডফিল্টার: * কোরিনেটারফেসস। ফিল্টারইন্টারফেস ইন্টারফেসের জন্য নির্দেশক নয়,"
যাইহোক, কোডটি পরিবর্তন করার সময়:
func DoBid() error {
bs := string(b)
var ifilterfield coreinterfaces.FilterInterface
fieldfilter := &coreinterfaces.FieldFilter{Key: "app", Val: "152511"}
ifilterfield = fieldfilter
filtermap := &coreinterfaces.FilterMap{}
_ = filtermap.AddFilter(&ifilterfield)
}
সবকিছু ঠিক আছে এবং অ্যাপ্লিকেশনটি ডিবাগ করার সময় এটি সত্যিই অন্তর্ভুক্ত বলে মনে হয়
আমি এই বিষয়ে কিছুটা বিভ্রান্ত হয়ে পড়েছি। অন্যান্য ব্লগ পোস্টগুলির দিকে তাকানোর সময় এবং এই একই একই সমস্যা নিয়ে আলোচনা করা ওভারফ্লো থ্রেডগুলি (উদাহরণস্বরূপ - এটি , বা এটি ) এই ব্যতিক্রম উত্থাপনকারী প্রথম স্নিপেটটি কাজ করা উচিত, কারণ ফিল্ডফিল্টার এবং ফিল্ডম্যাপ উভয়ই ইন্টারফেসের পয়েন্টার হিসাবে শুরু হয়, মানটির পরিবর্তে ইন্টারফেস। আমি এখানে আসলে যা ঘটে তা ঘিরে আমার মাথাটি গুটিয়ে রাখতে সক্ষম হইনি যে আমাকে ফিল্ডইনফেরফেস ঘোষণা না করার এবং সেই ইন্টারফেসের জন্য বাস্তবায়ন বরাদ্দ করার জন্য আমাকে পরিবর্তন করতে হবে। এটি করার জন্য অবশ্যই একটি মার্জিত উপায় থাকতে হবে।
* FilterInterface
করার জন্যFilterInterface
লাইন_ = filtermap.AddFilter(fieldfilter)
এখন উত্থাপন এই: filtermap.AddFilter করার যুক্তি fieldfilter ব্যবহার করতে পারে না (টাইপ coreinterfaces.FieldFilter) টাইপ coreinterfaces.FilterInterface হিসাবে: coreinterfaces.FieldFilter coreinterfaces.FilterInterface বাস্তবায়ন না (ফিল্টার পদ্ধতি পয়েন্টার রিসিভার আছে) তবে যখন পরিবর্তন_ = filtermap.AddFilter(&fieldfilter)
এটি লাইন কাজ করে। এখানে কি হয়? এটা কেন?