2016-04-11 17 views
0

İşlevimin bir arabirimine bir işaretçi alıyorum ve üzerinde yinelemeye çalışıyorum. Alttaki tür, interface{} türünü kullanıyorum ve ona bir işaretçi kullanmama dönüştürdüğüm bir dize dilimidir *interface{} Arabirime isabetçi işaretçi yazmanın en iyi yolu nedir? İşaretçiyi kullanarak dönüştürülecek değer büyük boyuttadır. çalışmıyorBoş bir arabirim türü belirtecine işaretçi

Kodu:

func convertMember(member *interface{}) { 
    for _, members := range member.([]string) { 
dereferencing pointer ile çalışmıyor

invalid type assertion: member.([]string) (non-interface type *interface {} on left)

Kodu:

func convertMember(member *interface{}) { 
    for _, members := range *member.([]string) { 

invalid type assertion: member.([]string) (non-interface type *interface {} on left)

Kanunu I çalışır Bir interf göndermek için ebeveyn işlevini değiştirmek

func convertMember(member interface{}) { 
    for _, members := range member.([]string) { 

Ya dize dilim onu ​​savunmak ve buna bir işaretçi kullanmak yazmalısınız: yerine kendi işaretçi ace?

func convertMember(member *interface{}) { 
    for _, members := range (*member).([]string) { ... } 
} 

Ama neden bir işaretçi arayüz istiyoruz:

+0

You; '(* Üyesi). ([] String)'. Ama, neden * bir arabirime bir işaretçi kullanıyorsun? Bir arabirime bir işaretçiyi kullanmanın hiçbir sebebi yok (ya da gerçekten). – JimB

+0

Teşekkür ederim @JimB. Görünüşe göre işe yaramadı çünkü '' üyesi (.]) Dizisini denedim çünkü küme parantezlerini vermedim. Ben bu soruya işaret edeceğim. – nohup

cevap

2

Sen iddianın önce dereferencing gerekir? Bir yapı bazı arabirimleri uygularken, bu yapının işaretçisi de bu arabirimi uygular. Bu yüzden arayüze bir işaretçi asla ihtiyaç duyulmuyor. Başvuru için

, burada ilgili soru: `*` işaretleyici KQUEUE Why can't I assign a *Struct to an *Interface?

+0

Teşekkür ederim. 'Range * üye' ('string') olarak atıfta bulunmayı denedim, ancak parantez kısmını kaçırdığımdan işe yaramadı. Bu kısmı soruya ekleyeceğim. İşe yaradı. – nohup

İlgili konular