逐行读取特定数据

I am trying to read data from a file in specific format.

file looks as follows

title:stack|content:overflow|metadata:53|comments:none
title:google|content:website|metadata:213|comments:Demos

I need to read this line by line and assign title variable with title value ("stack"), content with content value ("overflow") for each line.

scanner := bufio.NewScanner(file)
        for scanner.Scan() {
                data := scanner.Text()
                data_arr := strings.Split(data, "|")

                for _, n := range data_arr {

                        data_subdoc := strings.Split(n, ":")
                        a, b := data_subdoc[0], data_subdoc[1]

                        fmt.Println(a, b)

But problem is I get data as (relation between title, content, metadata and comments for each line is missing)

title stack
content overflow
metadata 53
comments none
title google
content website
metadata 213 
comments Demos

But, I want something like:

stack overflow 53

if stack has 53:
    print comments (in this case, its 'none')

google website 213

if google has 213, print content (In this case, its 'website')

As @LutzHorn suggested, why not read your data into a struct? The code below does that using reflection (though without checking for existence or type of field).

package main

import (
    "bufio"
    "fmt"
    "reflect"
    "strings"
)

type Entry struct {
    Title    string
    Content  string
    Metadata string
    Comments string
}

func main() {
    var input string = `title:stack|content:overflow|metadata:53|comments:none
title:google|content:website|metadata:213|comments:Demos
`

    var result = make(map[string]Entry)

    scanner := bufio.NewScanner(strings.NewReader(input))
    for scanner.Scan() {
        data := scanner.Text()
        data_arr := strings.Split(data, "|")

        entry := Entry{}

        for _, n := range data_arr {

            data_subdoc := strings.Split(n, ":")
            key, value := data_subdoc[0], data_subdoc[1]

            fmt.Println(key, value)

            field := strings.Title(key)
            reflect.Indirect(reflect.ValueOf(&entry)).FieldByName(field).SetString(value)
        }

        result[entry.Metadata] = entry
    }

    fmt.Printf("%+v
", result["53"])
    fmt.Printf("%+v
", result["213"])
}