Code Examples
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v3"
)
// An example showing how to unmarshal embedded
// structs from YAML.
type StructA struct {
A string `yaml:"a"`
}
type StructB struct {
// Embedded structs are not treated as embedded in YAML by default. To do that,
// add the ",inline" annotation below
StructA `yaml:",inline"`
B string `yaml:"b"`
}
var data = `
a: a string from struct A
b: a string from struct B
`
func main() {
var b StructB
err := yaml.Unmarshal([]byte(data), &b)
if err != nil {
log.Fatalf("cannot unmarshal data: %v", err)
}
fmt.Println(b.A)
fmt.Println(b.B)
}
Package-Level Type Names (total 9)
/* sort by: | */
A Decoder reads and decodes YAML values from an input stream. Decode reads the next YAML-encoded value from its input
and stores it in the value pointed to by v.
See the documentation for Unmarshal for details about the
conversion of YAML into a Go value. KnownFields ensures that the keys in decoded mappings to
exist as fields in the struct being decoded into.
*Decoder : github.com/grpc-ecosystem/grpc-gateway/v2/runtime.Decoder
func NewDecoder(r io.Reader) *Decoder
An Encoder writes YAML values to an output stream. Close closes the encoder by writing any remaining data.
It does not write a stream terminating string "...". Encode writes the YAML encoding of v to the stream.
If multiple items are encoded to the stream, the
second and subsequent document will be preceded
with a "---" document separator, but the first will not.
See the documentation for Marshal for details about the conversion of Go
values to YAML. SetIndent changes the used indentation used when encoding.
*Encoder : github.com/grpc-ecosystem/grpc-gateway/v2/runtime.Encoder
*Encoder : github.com/prometheus/common/expfmt.Closer
*Encoder : go.uber.org/zap/zapcore.ReflectedEncoder
*Encoder : io.Closer
func NewEncoder(w io.Writer) *Encoder
IsZeroer is used to check whether an object is zero to
determine whether it should be omitted when marshaling
with the omitempty flag. One notable implementation
is time.Time.( IsZeroer) IsZero() bool
*Node
github.com/alecthomas/chroma/v2.StyleEntry
github.com/apache/arrow-go/v18/arrow/float16.Num
*github.com/decred/dcrd/dcrec/secp256k1/v4.FieldVal
*github.com/decred/dcrd/dcrec/secp256k1/v4.ModNScalar
github.com/go-logr/logr.Logger
github.com/google/go-github/v66/github.Timestamp
github.com/jinzhu/now.Now
github.com/parquet-go/parquet-go/deprecated.Int96
golang.org/x/net/http2.PriorityFrame
golang.org/x/net/http2.PriorityParam
reflect.Value
time.Time
The Marshaler interface may be implemented by types to customize their
behavior when being marshaled into a YAML document. The returned value
is marshaled in place of the original value implementing Marshaler.
If an error is returned by MarshalYAML, the marshaling procedure stops
and returns with the provided error.( Marshaler) MarshalYAML() (interface{}, error)
github.com/prometheus/common/model.Duration
*github.com/wk8/go-ordered-map/v2.OrderedMap[...]
Node represents an element in the YAML document hierarchy. While documents
are typically encoded and decoded into higher level types, such as structs
and maps, Node is an intermediate representation that allows detailed
control over the content being decoded or encoded.
It's worth noting that although Node offers access into details such as
line numbers, colums, and comments, the content when re-encoded will not
have its original textual representation preserved. An effort is made to
render the data plesantly, and to preserve comments near the data they
describe, though.
Values that make use of the Node type interact with the yaml package in the
same way any other type would do, by encoding and decoding yaml data
directly or indirectly into them.
For example:
var person struct {
Name string
Address yaml.Node
}
err := yaml.Unmarshal(data, &person)
Or by itself:
var person Node
err := yaml.Unmarshal(data, &person) Alias holds the node that this alias points to. Only valid when Kind is AliasNode. Anchor holds the anchor name for this node, which allows aliases to point to it.Columnint Content holds contained nodes for documents, mappings, and sequences. FootComment holds any comments following the node and before empty lines. HeadComment holds any comments in the lines preceding the node and
not separated by an empty line. Kind defines whether the node is a document, a mapping, a sequence,
a scalar value, or an alias to another node. The specific data type of
scalar nodes may be obtained via the ShortTag and LongTag methods. Line and Column hold the node position in the decoded YAML text.
These fields are not respected when encoding the node. LineComment holds any comments at the end of the line where the node is in. Style allows customizing the apperance of the node in the tree. Tag holds the YAML tag defining the data type for the value.
When decoding, this field will always be set to the resolved tag,
even when it wasn't explicitly provided in the YAML content.
When encoding, if this field is unset the value type will be
implied from the node properties, and if it is set, it will only
be serialized into the representation if TaggedStyle is used or
the implicit tag diverges from the provided one. Value holds the unescaped and unquoted represenation of the value. Decode decodes the node and stores its data into the value pointed to by v.
See the documentation for Unmarshal for details about the
conversion of YAML into a Go value. Encode encodes value v and stores its representation in n.
See the documentation for Marshal for details about the
conversion of Go values into YAML. IsZero returns whether the node has all of its fields unset. LongTag returns the long form of the tag that indicates the data type for
the node. If the Tag field isn't explicitly defined, one will be computed
based on the node properties. SetString is a convenience function that sets the node to a string value
and defines its style in a pleasant way depending on its content. ShortTag returns the short form of the YAML tag that indicates data type for
the node. If the Tag field isn't explicitly defined, one will be computed
based on the node properties.
*Node : IsZeroer
*Node : github.com/grpc-ecosystem/grpc-gateway/v2/runtime.Decoder
*Node : github.com/grpc-ecosystem/grpc-gateway/v2/runtime.Encoder
*Node : go.uber.org/zap/zapcore.ReflectedEncoder
func Unmarshaler.UnmarshalYAML(value *Node) error
func github.com/wk8/go-ordered-map/v2.(*OrderedMap)[K, V].UnmarshalYAML(value *Node) error
A TypeError is returned by Unmarshal when one or more fields in
the YAML document cannot be properly decoded into the requested
types. When this error is returned, the value is still
unmarshaled partially.Errors[]string(*TypeError) Error() string
*TypeError : error
The Unmarshaler interface may be implemented by types to customize their
behavior when being unmarshaled from a YAML document.( Unmarshaler) UnmarshalYAML(value *Node) error
*github.com/wk8/go-ordered-map/v2.OrderedMap[...]
Package-Level Functions (total 4)
Marshal serializes the value provided into a YAML document. The structure
of the generated document will reflect the structure of the value itself.
Maps and pointers (to struct, string, int, etc) are accepted as the in value.
Struct fields are only marshalled if they are exported (have an upper case
first letter), and are marshalled using the field name lowercased as the
default key. Custom keys may be defined via the "yaml" name in the field
tag: the content preceding the first comma is used as the key, and the
following comma-separated options are used to tweak the marshalling process.
Conflicting names result in a runtime error.
The field tag format accepted is:
`(...) yaml:"[<key>][,<flag1>[,<flag2>]]" (...)`
The following flags are currently supported:
omitempty Only include the field if it's not set to the zero
value for the type or to empty slices or maps.
Zero valued structs will be omitted if all their public
fields are zero, unless they implement an IsZero
method (see the IsZeroer interface type), in which
case the field will be excluded if IsZero returns true.
flow Marshal using a flow style (useful for structs,
sequences and maps).
inline Inline the field, which must be a struct or a map,
causing all of its fields or keys to be processed as if
they were part of the outer struct. For maps, keys must
not conflict with the yaml keys of other struct fields.
In addition, if the key is "-", the field is ignored.
For example:
type T struct {
F int `yaml:"a,omitempty"`
B int
}
yaml.Marshal(&T{B: 2}) // Returns "b: 2\n"
yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n"
NewDecoder returns a new decoder that reads from r.
The decoder introduces its own buffering and may read
data from r beyond the YAML values requested.
NewEncoder returns a new encoder that writes to w.
The Encoder should be closed after use to flush all data
to w.
Unmarshal decodes the first document found within the in byte slice
and assigns decoded values into the out value.
Maps and pointers (to a struct, string, int, etc) are accepted as out
values. If an internal pointer within a struct is not initialized,
the yaml package will initialize it if necessary for unmarshalling
the provided data. The out parameter must not be nil.
The type of the decoded values should be compatible with the respective
values in out. If one or more values cannot be decoded due to a type
mismatches, decoding continues partially until the end of the YAML
content, and a *yaml.TypeError is returned with details for all
missed values.
Struct fields are only unmarshalled if they are exported (have an
upper case first letter), and are unmarshalled using the field name
lowercased as the default key. Custom keys may be defined via the
"yaml" name in the field tag: the content preceding the first comma
is used as the key, and the following comma-separated options are
used to tweak the marshalling process (see Marshal).
Conflicting names result in a runtime error.
For example:
type T struct {
F int `yaml:"a,omitempty"`
B int
}
var t T
yaml.Unmarshal([]byte("a: 1\nb: 2"), &t)
See the documentation of Marshal for the format of tags and a list of
supported tag options.
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.