我有一个简短的 Go 程序,它运行go list -json多个包的命令,将命令每次运行的输出存储在 json.RawMessage 中,将每个 json.RawMessage 附加到 json.RawMessages 的一部分中,然后将结果返回到服务器在将每个 json.RawMessages 连接在一起并压缩 json 之后。但是,运行时会生成一条错误消息,json.Compact但无法找到其来源。谷歌搜索此错误消息表明,大多数似乎遇到它的人 - 无论是无效的,还是其他一些角色 - 都很难找到它的来源。
invalid character ',' looking for beginning of value
带有注释的代码可以在 play.golang.org 上查看(虽然它不会在那里运行),也可以在下面查看。
问题:你能解释一下这个错误的来源以及如何预防吗?
(请注意,某些软件包仅用于测试目的)
package main
import (
"expvar"
"encoding/json"
"bytes"
"fmt"
"github.com/go-martini/martini"
"github.com/zenazn/goji"
"github.com/zenazn/goji/web"
"go/build"
"log"
"math/rand"
"net/http"
_ "net/http/pprof"
"os/exec"
)
type myType struct {
J []json.RawMessage
}
var pack map[string]string
type GoList struct {
Imports []string
}
type Import struct {
Dir string
ImportPath string
Name string
Target string
Standard bool
Root string
GoFiles []string
Imports []string
Deps []string
}
const contentTypeJSON = "application/json"
func main() {
http.HandleFunc("/importgraph", func(w http.ResponseWriter, r *http.Request) { importGraph(w, r) })
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Println("Inside handler")
fmt.Fprintf(w, "Hello world from my Go program!")
}
func importGraph(w http.ResponseWriter, r *http.Request) {
pack = make(map[string]string)
var t myType
cmd := exec.Command("go", "list", "-json")
stdout, err := cmd.Output()
if err != nil {
println(err.Error())
return
}
var list GoList
err = json.Unmarshal(stdout, &list)
for _, d := range list.Imports {
//get the imports for each of the packages listed by go list -json
t.imports(d)
}
慕无忌1623718
大话西游666
幕布斯7119047
相关分类