2016-04-01 19 views
0

Ich bin neu zu Golang, und auch irgendwie neu zu programmieren. Und es war sehr schwer für mich. Das ist eine Sache, die mich immer verwirrt: Datentypen. Wenn Sie diese (nicht auf dem Spielplatz) laufen, dann wird es ausspucken:GO: Array/Slice zu regulären String

./main.go:40: cannot use recorded (type string) as type SVC in append 

und wenn ich die Werte in dem Zufügen-Anruf umzukehren, wird es ausspucken:

./main.go:40: first argument to append must be slice; have string 

Was ich versuche, Zu tun ist, greifen alle Sachen in das Home-Verzeichnis, fügen Sie alle Werte mit den Änderungen an ein Array, und legen Sie das Array in eine Datei mit ioutil. Alles, was ich will (jetzt), ist, die Werte an die Scheibe im Func-Datensatz anzuhängen. Kann jemand helfen?

package main 

import "os" 
import "io/ioutil" 
import "fmt" 

type SVC struct { 
     key string 
     val string 
} 

func main() { 
     os.Chdir("../../../../../../..") 
     var data, err = ioutil.ReadDir("home") 
     checkerr(err) 
     for _, data := range data { 
       fmt.Println(data.Name()) 
     } 
     os.Chdir("home/beanboybunny/repos/bux/go/src/bux") 
} 
func checkerr(err1 error) { 
     if err1 != nil { 
       fmt.Println("error") 
     } 
} 
func writer(dataname string) { 
     f := "var " 
     uname := dataname 
     q := " = VVC{\n" 
     w := " bux: 1,\n" 
     e := " op: true,\n" 
     c := "}" 

     b2 := f + uname + q + w + e + c 
     record(b2) 
} 

func record(recorded string) { 
     cache := []SVC{} 
     record SVC := recorded 
     appenda := append(cache, recorded) 
} 

Antwort

0

Ihre type SVC struct verfügt über zwei private String-Felder. Wenn Sie nur ein Array von Strings benötigen, benötigen Sie nicht den Typ SVC.

Wenn Sie nur ein Array von Strings mit speziell Transformation der Elemente im Home-Verzeichnis formatiert zu bauen versucht, hier ist ein Anfang die Verwendung von append und Formatstrings zeigt: https://play.golang.org/p/eUKTKRxwfp

package main 

import (
    "fmt" 
    "io/ioutil" 
    "os" 
    "strings" 
) 

func main() { 
    os.Chdir("../../../../../../..") 
    var data, err = ioutil.ReadDir("home") 
    checkerr(err) 
    lines := []string{} 
    for _, data := range data { 
     fmt.Println(data.Name()) 
     lines = append(lines, buildLine(data.Name())) 
    } 
    fmt.Println(strings.Join(lines, "\n")) 
    os.Chdir("home/beanboybunny/repos/bux/go/src/bux") 
} 

func checkerr(err1 error) { 
    if err1 != nil { 
     fmt.Printf("error: %v", err1) 
    } 
} 

func buildLine(dataname string) string { 
    return fmt.Sprintf("var %s = VVC{\n bux: 1,\n op: true,\n}", dataname) 
} 
0

Sie können keine Meter zu Litern hinzufügen. Sie können also den Typ string nicht an eine Liste von SVC Datensätzen anhängen.

Wenn Sie []SVC als Ausgang (Liste der SVC) benötigen Sie einen Parser zu implementieren, die einen String in einen SVC Objekt transformieren und sie anhängen.

Wenn Sie []string als Ausgabe möchten, müssen Sie einen Serializer implementieren, der eine SVC in eine Zeichenfolge umwandelt und anhängen.

Wie es zu tun ist, ist eine separate Frage, die für diese Frage nicht in Betracht kommt.

Verwandte Themen