You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Where seq is read into a []string will produce 6 entries in go-yaml/v2 but only one in go-yaml/v3. I believe the correct behavior is that of v2. The empty elements should have been added as empty strings in the slice.
The text was updated successfully, but these errors were encountered:
I am seeing this too, it seems to be present whether or not there are comments.
yaml_test % cat go.mod
module yaml_test
go 1.21.5
require (
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
yaml_test % cat main.go
package main
import (
"fmt"
yaml2 "gopkg.in/yaml.v2"
yaml3 "gopkg.in/yaml.v3"
)
type Test struct {
Foo []struct{} `yaml:"foo"`
}
func withYaml2() (Test, error) {
var test Test
err := yaml2.Unmarshal([]byte("foo:\n-"), &test)
return test, err
}
func withYaml3() (Test, error) {
var test Test
err := yaml3.Unmarshal([]byte("foo:\n-"), &test)
return test, err
}
func main() {
fmt.Println(withYaml2())
fmt.Println(withYaml3())
}
yaml_test % go run main.go
{[{}]} <nil>
{[]} <nil>
It seems like go-yaml/v3 is treating foo:\n- as a zero-length slice, whereas go-yaml/v2 treats it as a slice of length one whose entry has the zero value. IMO v2 is doing the right thing and v3 should be changed to match.
The following YAML:
Where seq is read into a
[]string
will produce 6 entries in go-yaml/v2 but only one in go-yaml/v3. I believe the correct behavior is that of v2. The empty elements should have been added as empty strings in the slice.The text was updated successfully, but these errors were encountered: