İş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:
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
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