Today, we’ll take a closer look at the Func structure and discuss a few details on how garbage collection works in Go.
This post is a continuation of “Golang Internals, Part 3: The Linker and Go Object Files” and uses the same sample program. So, if you haven’t read it, I strongly advise that you do this before moving forward.
Today, I will speak about the Go linker, Go object files, and relocations.
Why should we care about these things? Well, if you want to learn the internals of any large project, the first thing you need to do is split it into components or modules. Second, you need to understand what interface these modules provide to each other. In Go, these high-level modules are the compiler, linker, and runtime. The interface that the compiler provides and the linker consumes is an object file and that’s where we will start our investigation today.
All parts: Part 1 | Part 2 | Part 3 | Part 4
Do you know what exactly happens in the Go runtime, when you use a variable via interface reference? This is not a trivial question, because in Go a type that implements an interface does not contain any references to this interface whatsoever. Still, we can try answering it, using our knowledge of the Go compiler, which was discussed in the previous blog post.
So, let’s take a deep dive into the Go compiler: create a basic Go program and see the internal workings of the Go typecasting. Using it as an example, I’ll explain how a node tree is generated and utilized. So, you can further apply this knowledge to other Go compiler’s features.
All parts: Part 1 | Part 2 | Part 3 | Part 4
This series of blog posts is intended for those who are already familiar with the basics of Go and would like to get a deeper insight into its internals. Today’s post is dedicated to the structure of Go source code and some internal details of the Go compiler. After reading this, you should be able to answer the following questions:
1. What is the structure of Go source code?
2. How does the Go compiler work?
3. What is the basic structure of a node tree in Go?
Want to better understand Cloud Foundry? Try it first-hand! Our dev team has created a 15-step interactive tutorial that teaches the basic CLI commands. Playing with this live CF demo, you can learn:
- how to deploy, monitor, and scale apps on CF
- how to create instances and bind them to apps
- how to set up environments, organizations, and spaces
- how to use the CF manifest, etc.
Diego will also be enabled very soon.
APIs are crucial for any microservices-based architecture—as a means of communication between its services. Yet, developing an API from scratch is not a trivial task. You need to provide meta data, write server code, create a DB structure, develop new methods for new objects, etc. Luckily, many of these tasks can be automated. In this blog post, we investigate what are the key criteria for selecting API automation tools.
In most performance comparisons, Redis (an open source key-value cache/store) is mainly treated as a caching-only solution. Others are only focused on a single provider. However, customers are interested in deeper utilization of built-in data types and server-side operations. In production, you may have several loads that query your database simultaneously—with different types of tasks.
For this reason, we designed a scenario that evaluates Redis performance in more complicated conditions. It combines two different types of queries (both simple and complex) generated concurrently. We’ve just published the performance results here (latencies, throughput, etc.). In this blog post, you’ll find some of the main findings.
An ability to easily extend core functionality is a key for any system’s evolution. Every popular config management or cloud orchestration tool offers a handy and effective way to do so. For instance, knife plugins in Chef, custom functions in Puppet, and terraform plugins. Being a complex tool, BOSH also provides out-of-the-box utilities for the purpose. The best option for extending BOSH functionality are plugins for a command-line interface (CLI). In fact, major part of the BOSH command-line utilities are implemented as BOSH plugins: the standard BOSH commands, MicroBOSH, BOSH AWS plugin, etc.
Unfortunately, there is no official documentation available on how to create a custom BOSH plugin by yourself, so I decided to compile such a tutorial. In this blog post, I provide guidelines on how to create a custom plugin for BOSH CLI to push the boundaries of the BOSH functionality and significantly boost resolution of application tasks.
Although monolithic architectures are prevalent today, they might not be the best fit for complex cloud-based systems—especially if you implement changes frequently. That’s where microservices enter the arena to overcome the challenges by splitting monoliths into multiple independent services, each with its own simple business logic. Still, choosing either PaaS or IaaS for microservices is an open question. Below is a table that demonstrates six major differences when implementing microservices on IaaS vs. PaaS (such as Cloud Foundry).
WATCH THE RECORDING OF THE LIVE STREAM: