2015-02-13 13 views
6

Test senaryoları başarısız olduğunda bir yapının yazdırılmasında sorun yaşıyorum. Yapılara işaret eden bir dilim veya *[]*X işaretçisidir. Sorun şu ki, dilimin içindeki X -yapılarının içeriğini bilmem gerekiyor, ancak tüm zinciri yazdıramam. Sadece adreslerini yazdırıyor, çünkü bir işaretçi. İşaretçileri takip etmek için ona ihtiyacım var.Hangi bayrak fmt.Printf için ardışık işaretçiler takip etmek?

Test etmek istediğim işlev içeriklerini değiştirdiğinden ve test kodunun işaretçileri kullanmamasını değiştirdiğinden bu sadece işe yaramıyor, sadece kodu işaretçilerle test etmemek anlamına geliyor (bu yüzden işe yaramayacak).

Ayrıca, gerçek işlev kullandığı ve birden çok işaretçi katmanını işleyebildiği için, yalnızca dilimden geçiş yapmak işe yaramaz.

Basitleştirilmiş örnek:

package main 

import "fmt" 

func main() { 
    type X struct { 
     desc string 
    } 

    type test struct { 
     in *[]*X 
     want *[]*X 
    } 

    test1 := test{ 
     in: &[]*X{ 
      &X{desc: "first"}, 
      &X{desc: "second"}, 
      &X{desc: "third"}, 
     }, 
    } 

    fmt.Printf("%#v", test1) 
} 

örnek çıkışı:

main.test{in:(*[]*main.X)(0x10436180), want:(*[]*main.X)(nil)} 

(kod http://play.golang.org/p/q8Its5l_lL olan)

+7

yapılarda dilimlerine işaretçileri kullanmayın! Dilimler zaten bir referans. –

+0

% v, ne tür bir çıktı istediğinizi tahmin edemezsiniz. Belirli bir şekilde biçimlendirilmiş bir şey için 'fmt' çıktısını istiyorsanız,' fmt.Stringer' veya 'fmt.Formatter' birini uygulayın. –

+0

Ayrıca, bir [[*] X yerine bir [] X 'isteyebilirsiniz. Her birini [bu cevap] 'nın altında kullandığınız zaman hakkında bir şeyler yazdım (http://stackoverflow.com/questions/23542989/pointers-vs-values-in-parameters-and-return-values/23551970#23551970) (hangisi daha yüksek, diğer türlerin (dilimler dışında) halihazırda verilere atıfta bulunduğunu tartışmaktadır. – twotwotwo

cevap

İlgili konular