Skip to content

Go Language

Implementation Summary for gqlgen Request

GraphQL has wonderful features, the most charming features omparing to Restful API are:

  • nested query.
  • get the data nothing more.
  • explicated data type.

Here, I will take a deep look to know how these features are implemented. Before taking an eye in the framework code, we should make a reflection first, how could these features be implemented.

Copy Behaviors in Go

In cpp, there are concepts of reference , value, right value and left value. The go is very similar with some idolisms of C++, for example we cannot copy the iostream in cpp, as the same io in go always passed by reference with the help of interface.

However, go doesn’t have reference acurrately, as it only has concepts about value and pointer. The reference in title should be called pointer also.

C++ has a dilicated way to control what happened when copying and moving, but golang doesn’t have such concepts, which means the complexities are hidden in the compiler and runtime.

Let’s focus on the copy behavior of basic types in golang, we can see that when copying, map, chan and context are treated as reference, the origin one and copied one share the same one. It’s worthy to know why some types are copied by reference instead of value.

Functions Cannot Compare

In go, there are some cases when we need to check functions in some cases:

  • check the equality of functions
  • compare two objects with function fields.

However, function type in Go is not addressable and not comparable.