Giter Club home page Giter Club logo

Comments (4)

zak905 avatar zak905 commented on May 24, 2024

Hi @donnol,

I believe this is expected and cannot be considered as a bug because:

  • when you do not use the schema tag, schema uses the field name in lower case to decode, and therefore:
type Outer struct {
	Page
}

is equivalent to:

type Outer struct {
	Page  `schema:"page"`
}

when you try to decode map[string][]string{"page": {"1"}}

you are trying to decode a string into a struct which schema does know how to do. To work around it, you need to use the full path in your query string: map[string][]string{"page.page": {"1"}, "page.pageSize": {"22"}}

from schema.

zak905 avatar zak905 commented on May 24, 2024

@donnol Does my answer help ? because schema uses reflection, it's only aware of the Page field. I know in golang that embedding a struct is like unwrapping all the fields inside the target struct, so doing pp.PageSize works as well as doing pp.Page.PageSize. However, reflection only sees the embedded struct field:


	tp := reflect.TypeOf(Outer{})

        //prints 1 
	fmt.Println(tp.NumField())

	i := 0

	for i < tp.NumField() {
		fmt.Println(tp.Field(i).Name)
		i++
	}

      //prints Page

I hope this helps.

from schema.

donnol avatar donnol commented on May 24, 2024
	{
		tp := reflect.TypeOf(Outer{})

		//prints 1
		fmt.Println(tp.NumField())

		i := 0

		for i < tp.NumField() {
			if tp.Field(i).Anonymous {
				fmt.Println("anonymous", tp.Field(i).Type, tp.Field(i).Type.NumField())
			}
			fmt.Println(tp.Field(i).Name)
			i++
		}
	}

I think we can use tp.Field(i).Anonymous to identify a field if is Anonymous , and then get its inner field.

from schema.

zak905 avatar zak905 commented on May 24, 2024

I believe it should be feasible, thanks for the information. I propose adding a flag when decoding/encoding that can define the behavior of the decoder/encoder when dealing embded structs. The flag can define whether we need to unwrap the structs or just treat them as a field. We can name it for example UnwrapEmbeddedStructs. Based on the valuie of the field, we can check for Anonymous and take it from there. This would keep things backward compatible.

from schema.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.