Skip to content

2022

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.

How Go Exec Works

It’s common to run and wish to get results. As the command is executed in a forked child process, how results are passed back? This blog investigates how output is passed to parent process in command.Output.

Design of Go-Github Library

Usually, we write a client package to hide the logic about rpc to get the value, hide complex about network.

This article will based on the library of https://github.com/google/go-github to introduce useful experience when we want to design a client for results from the remote.

As usual, our client package needs to satisfy some requirements, which why we create a saperate package for it.

  • we need to call many api from server, and most logics of them are duplicated.
  • hide some duplicated work and could be reused by the caller.

Not Encourage Copy Hint In Go Language

In cpp, some classes cannot be copied as their copy constructers are disable. For example, you can never pass an iostream by value, only reference is allowed.

Based on provious blogs, we know that if we pass by pointer or interface, the value will be passed like reference.

Define and Use Error Properly in Go

Copy Behaviors in Go

Go has no way to disable the copy, but it provides a way to check whether the code not wishes to copy something.