2016-03-29 25 views
1

Dilim olan bir yapı üzerinde işlev yapmak istiyorum. Sorunum: Yapı içeriğimi değiştirmem gerektiğinden bir işaretçi argümanı kullanmak istiyorum. Java dünyasında (çok özür dilerim) yanlış geçmeden öylesine belki yoluma geliyorumGit arabirim dilimi ve işaretçi

type CampaignIndexMemory []CampaignIndex 

type CampaignIndex struct { 
    Objects []CampaignIndexObject 
} 

type CampaignIndexObject struct { 
    //They don't really care about us 
} 

func (c *CampaignIndexMemory) setCampaignIndex(object CampaignIndex) { 

    valueSet := false 
    for i,_ := range c { 
     if c[i].Objects[0].ID == object.Objects[0].ID { 
      c[i] = object 
      valueSet = false 
      break 
     } 
    } 
    if valueSet { 
     c = append(c, object) 
    } 
} 

:

İşte benim kodudur.

Bu kod ile derleme yanlıştır ve "Nesneler" özniteliğimde "çözümlenmemiş başvuru" yazıyor.

Sorumu basit: Neler oluyor? Yardımlarınız, zaman ve iyilik :) için

Teşekkür

+0

_ "Bir dilim olan bir yapıda bir işlev oluşturmak istiyorum." _ Ancak, alıcınız bir "struct" değil, bir "* CampaignIndexMemory", yani "CampaignIndex" öğesinin bir dilimine bir işaretçi. – Michael

+0

Sadece türümü yapıya dönüştürdüm ve iyi çalışıyor. Teşekkürler. Bu benim yeni kodum: tür CampaignIndexMemory struct {indexes [] CampaignIndex} Ve tüm c [i] c.indexes [i] ile değiştirmem gerek. –

cevap

0

Yöntemleri türlerinde tanımlanmıştır. CampaignIndexMemory, struct değil, type'dur. Tür, "CampaignIndex dilimidir".

documentation about slices itibaren

Dilimler altta yatan bir diziye başvurular tutun ve birinden diğerine dilim atarsanız, her ikisi de aynı diziye bakın. Bir işlev, bir dilim argümanını alırsa, dilim öğesinin göründüğü değişkeni, bir işaretçiyi temel dizisine geçirmeye benzeyen arayana görünür hale getirir. yöntemin setCampaignIndex için alıcıyı ima

bir slice yerine bir dilime bir işaretçi olabilir. Değişiklikler arayan kişiye uygulanacaktır. slice header bir dilim noktalarına

func (c CampaignIndexMemory) setCampaignIndex(object CampaignIndex) { 

İşaretçiler yüzden dilim bağlantısı bir Object alan içermediğinden elindeki hata sanırım.