-2

我是编程新手,我正在浏览与 Go 一起使用的不同代码的示例。我有一个简单的两个函数程序,它解析 XML 表并返回搜索项:

package main

import (
    "encoding/xml"
    "os"
    "strings"
)

type document struct {
    Title string `xml:"title"`
    URL   string `xml:"url"`
    Text  string `xml:"abstract"`
    ID    int
}

func LoadDocuments(path string) ([]document, error) {
    f, err := os.Open(path)
    if err != nil {
        return nil, err
    }
    defer f.Close()

    dec := xml.NewDecoder(f)
    dump := struct {
        Documents []document `xml:"doc"`
    }{}
    if err := dec.Decode(&dump); err != nil {
        return nil, err
    }

    docs := dump.Documents
    for i := range docs {
        docs[i].ID = i
    }
    return docs, nil
}

func SearchData(docs []document, term string) []document {
    var r []document
    for _, doc := range docs {
        if strings.Contains(doc.Text, term) {
            r = append(r, doc)
        }
    }
    return r
}

如何让 SearchData 函数返回一个 doc.URL 实例而不是整个文档块?

4

1 回答 1

3

使用选择器表达式 doc.URL访问structURL中的字段。收集字符串切片中的字段值。返回字符串切片。document URL

func SearchData(docs []document, term string) []string {
    var r []string
    for _, doc := range docs {
        if strings.Contains(doc.Text, term) {
            r = append(r, doc.URL)
        }
    }
    return r
}
于 2021-03-18T21:38:29.290 回答