2017-10-11 1 views
0

J'ecrivais quelque chose à l'objet tabwriter.Writer,Comment vérifier la réponse de retour tabwriter.Writer à golang

w := tabwriter.NewWriter(os.Stdout, 5, 1, 3, ' ', 0) 
    fmt.Fprintf(w, "%v\t%v\t\n", somevalue1, somevalue2) 

Je peux imprimer les données avec la console en utilisant w.Flush() Y at-il façon donc obtenir des valeurs dans w comme chaîne à un endroit et le comparer avec une valeur?

Je veux comparer ce que j'ai dans w avec quelques données.

Répondre

0

Vous pouvez mettre en œuvre votre propre io.Writer:

type W []byte 

func (w *W) Write(b []byte) (int, error) { 
    *w = append(*w, b...) 
    return len(b), nil 
} 

Vous pouvez ensuite passer une instance de *W-tabwriter.NewWriter:

sw := &W{} 
w := tabwriter.NewWriter(sw, 5, 1, 3, ' ', 0) 
fmt.Fprintf(w, "%v\t%v\t\n", somevalue1, somevalue2) 

// get the string value from sw 
str := string(*sw) 

Comme sugested par @ Tim, vous devez utiliser *bytes.Buffer plutôt pour de meilleures performances et il implémente déjà io.Writer:

var b bytes.Buffer 
w := tabwriter.NewWriter(&b, 0, 0, 1, '.', 0) 
// ... 
fmt.Println(b.String()) 
+2

Je recommande d'utiliser simplement 'bytes.Buffer' au lieu d'implémenter moi-même cette méthode. –