string - 从字符串到结构 Golang

标签 string performance function go

我创建了一个函数来将特定字符串(派生自 [] 字节)转换为结构。在我正在构建的程序中,进行了加密和解密,并且在这两个 channel 之间,数据通过 JSON 传输。我建议的功能有效,但是当字符串变得很长时,处理时间会很长。 我想问的是,是否有人知道如何加快此功能或如何更好地管理这种情况。

这是函数

func Datadecrypt(input []byte) Data {

    s := string(input)

    vals := strings.Replace(s,"  "," ",-1)

    part := strings.Fields(vals)

    c := strings.Split(s, "int=")[1]
    co := strings.Split(c, ")")[0]

    count, err := strconv.Atoi(co)
    if err != nil {
        log.Fatal(err)
    }

    var stringa string

    for j := 0; j<len(part); j++ {
        if strings.ContainsAny(part[j], ":") {
            stringa = stringa+" "+part[j]
        } else {
            stringa = stringa+","+part[j]
        }
    }

    var interpart []map[string]string
    var result Data

    var i = 0

    for {

        split := strings.Split(stringa, "[")[2+i]

        splitend := strings.Split(split, "]")[0]

        control := strings.Replace(splitend,"  "," ",-1)

        mapst := mapstring.StrToMS(control)

        interpart = append(interpart, mapst)

        i++

        if i >= count {
            break
        }
    }

    result = Data{Count: count, Results: interpart}

    return result
}

这是结构

type Data struct {
    Count int `json:"count"`
    Results []map[string]string `json:"result"`
}

这是从 s:= string (input) 派生的字符串

"Count=\"%!s(int=107)\"\nResults=\"[map[MATRICOLA:2 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:7 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:5 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:6 NOMEmy:value COGNOMEmy:value]]\"\n"

我上面写的字符串是使用JSON响应打印出来的

这是输入字符串,不是 JSON

Count="%!s(int=107)"
Results="[map[MATRICOLA:2 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:7 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:5 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:6 NOMEmy:value COGNOMEmy:value]]"

这是我通过函数得到的结果

{107 map[MATRICOLA:2 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:7 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:5 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:6 NOMEmy:value COGNOMEmy:value]]}

提前致谢

最佳答案

这不是您问题的答案,但可能是您问题的解决方案。如果我完全错了,请发表评论。

输入的字符串看起来像是通过 fmt.Printf()

生成的
"Count=\"%!s(int=107)\"\nResults=\"[map[MATRICOLA:2 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:7 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:5 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:6 NOMEmy:value COGNOMEmy:value]]\"\n"

https://play.golang.org/p/pRWUtRKikEh

    count := 107
    results := "[map[MATRICOLA:2 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:7 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:5 NOMEmy:value COGNOMEmy:value] map[MATRICOLA:6 NOMEmy:value COGNOMEmy:value]]"

    fmt.Printf("Count=%s\nResults=%s", count, results)

因此,如果您能够将打印语句更改为 fmt.Printf("Count=%d\nResults=%s", count, results),输出将是正确的。 https://play.golang.org/p/g45_TiHMFsG

关于string - 从字符串到结构 Golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51724151/

相关文章:

python - 如何在读取 CSV 文件时将字符串值转换为整数值?

sql - rails : Faster way to retrieve N random records

c++ - 如何跟踪递归函数 C++

function - 尝试创建一个插入函数

c - 在 GTK C 中通过回调函数传递变量

javascript - jQuery 文本 html 操作,在大量文本中查找字符的出现,然后更改其颜色

c++ - 如何使模板重新推导出已经衰减为 const char* 的 const char[N] "mychar"?

javascript - 从 javascript 中的元标记获取日期

database - 显式连接与隐式连接?

c++ - 从 GPU 复制到 CPU 比从 CPU 复制到 GPU 慢