Dynamic programming can be thought of as a way of breaking a complex problem into sub-problems, solving each of these sub-problems once, and saving the solutions for later use. As we’ll see later in this article, this approach offers efficiency and modularity benefits over other approaches, which we’ll explore shortly.
When we talk about dynamic programming, we must also discuss the following techniques:
Memoization: Not to be confused with
Memoizationis a technique for improving the performance of a recursive function/algorithm. …
Many programming languages support passing an argument by value and/or by reference. In this article, we’re going to learn how Go's function handles passed arguments.
In Go, when a parameter is passed to a function by value, it means the parameter is copied into another location of your memory. When accessing or modifying the variable within your function, only the copy is accessed or modified — the original value is never modified. All primitive/basic types (int and its variants, float and its variants, boolean, string, array, and struct) in Go are passed by value. Passing by value is usually how…
Many companies are betting on Go due to its composability, scalability, and concurrency — along with other super interesting features.
Simple web services and microservice applications require a well-considered logging strategy to help us understand user behavior, localize errors, and monitor the performance of our applications.
In this article, we’re going to explore tracing, metrics, and logging. Logging, in particular, will receive the highest focus.
Tracing covers a wider and more continuous view of an application than logging does. The main reason for implementing tracing is to enable the overseeing of the application’s flow and data progression in and out…