Artem Krylysov

Posts tagged with go

String interning in Go

String interning is a technique of storing only one copy of each unique string in memory. It can significantly reduce memory usage for applications that store many duplicated strings.

Handling C++ exceptions in Go

Cgo is a mechanism that allows Go packages call C code. The Go compiler enables cgo for every .go source file that imports a special pseudo package "C". The text in the comment before the import "C" line is treated as a C code. You can include headers, define functions, types and variables - everything a normal C code can do:

package main

#include <stdio.h>

void foo(int x) {
    printf("x: %d\n", x);
import "C"

func main() { // x: 123

Profiling and optimizing Go web applications

Go has a powerful built-in profiler that supports CPU, memory, goroutine and block (contention) profiling.

Enabling the profiler

Go provides a low-level profiling API runtime/pprof, but if you are developing a long-running service, it's more convenient to work with a high-level net/http/pprof package.

All you need to enable the profiler is to import net/http/pprof and it will automatically register the required HTTP handlers:

package main

import (
    _ "net/http/pprof"

func hiHandler(w http.ResponseWriter, r *http.Request) {

func main() {
    http.HandleFunc("/", hiHandler)
    http.ListenAndServe(":8080", nil)