Search code examples
gohcl

Can anyone help to parse HCL?


I'm going to parse HCL configuration file using this repository.

package main

import (
    "fmt"
    hclParser "github.com/hashicorp/hcl/hcl/parser"
)

const (
    EXAMPLE_CONFIG_STRING = "log_dir = \"/var/log\""
)

func main() {
    // parse HCL configuration
    if astFile, err := hclParser.Parse([]byte(EXAMPLE_CONFIG_STRING)); err == nil {
        fmt.Println(astFile)
    } else {
        fmt.Println("Parsing failed.")
    }
}

How can I parse log_dir in this case?


Solution

  • github.com/hashicorp/hcl/hcl/parser is a low-level package. Use the high-level API instead:

    package main
    
    import (
            "fmt"
    
            "github.com/hashicorp/hcl"
    )
    
    type T struct {
            LogDir string `hcl:"log_dir"`
    }
    
    func main() {
            var t T
            err := hcl.Decode(&t, `log_dir = "/var/log"`)
            fmt.Println(t.LogDir, err)
    }
    

    There is also DecodeObject available if you really want to deal with the AST yourself.