My VS Code Congig for Go

{
    "go.lintTool": "golangci-lint",
    "go.formatTool": "goimports",
    "go.useLanguageServer": true,
    "go.lintOnSave": "package",
    "go.vetOnSave": "package",
    "go.vetFlags": [
        "-all",
        "-shadow"
    ]
}

Understanding the GOPATH environment variable

The GOPATH environment variable lists places to look for Go code. It defines your workspace. It is likely the only environment variable you’ll need to set when developing Go code. Official documentation: How to Write Go Code: The GOPATH environment variable Command go: GOPATH environment variable Normally the GOPATH is set in your shell profile (one of ~/.bashrc, ~/.bash_profile, etc). When you install packages and build binaries, the Go tool will look for source code in $GOPATH/src/ followed by a package import path in order to resolve dependencies. [Read More]
get 

Go Configuration - Environment variables

Open up .profile or .zshrc or .bashrc depending on our OS and add/edit following: #!/bin/bash # Specifies where the Go destribution is installed on the system. export GOROOT=/usr/local/go # Specifies top-level directory containing source code for all our Go projects. # Inside this directory, we need to create 3 more directories viz. "src", "pkg" and "bin". export GOPATH=~/adiwork/go # This directory is also known as Go Workspace. # "src" directory inside Workspace represents where all the Go source code will be stored. [Read More]
get 

"go build" and "go install"

Let’s tidy up the $GOPATH directory and only keep Go source code files left over: # tree . ├── bin ├── pkg └── src ├── greet │ └── greet.go └── hello └── hello.go 5 directories, 2 files The greet.go is greet package which just provides one function: # cat src/greet/greet.go package greet import "fmt" func Greet() { fmt.Println("नमस्ते किंशुक!") } While hello.go is a main package which takes advantage of greet and can be built into an executable binary: [Read More]

"go get" command

“go get” command is the standard way of downloading and installing packages and related dependencies. The snippet above basically tells the compiler to import the crypto package available at the github.com/mattetti/goRailsYourself/crypto path. It doesn’t mean that the compiler will automatically pull down the repository, so where does it find the code? You need to pull down the code yourself. The easiest way is to use the go get command provided by Go. [Read More]
get 

Common Abbreviations Used In Go

Following are some of the common Abbreviations used in Go standard libraries: var s string // string var i int // index var num int // number var msg string // message var v string // value var val string // value var fv string // flag value var err error // error value var args []string // arguments var seen bool // has seen? var parsed bool // parsing ok? [Read More]

Constants in Go

Intro Constants are declared like variables, but with the const keyword. Constants can only be character, string, boolean, or numeric values and cannot be declared using the := syntax. An untyped constant takes the type needed by its context. Example: const Pi = 3.14 const ( StatusOK = 200 StatusCreated = 201 StatusAccepted = 202 StatusNonAuthoritativeInfo = 203 StatusNoContent = 204 StatusResetContent = 205 StatusPartialContent = 206 ) Constants belong to compile time. [Read More]

Dependency Management - vendoring

Google is well known to have an immense mono repo so go get works well for them. This is not the case with everyone else. By default go get pulls the master branch of the repo you point it at. When you do a go get it pulls in the required dependencies, this means there are issues with reproducibility. As of go 1.5 they looked to address some of the issues by introducing the vendor directory. [Read More]
get 

Install Golang

Installing using OS package manager You might use your package manager to install Go or install manually from the official release binaries. Either way should be easy. Because the go tool is able to download code from remote repositories, it is often useful to have installed clients for the various supported version control systems. At the time of this writing, they are documented as: Bazaar, Git, Mercurial and Subversion. They are not mandatory requirements, you might go a long way with just having git installed, and installing others later as required. [Read More]

Unused variables

Unused variables in blocked scope are not allowed in Go since they cause maintenance nightmares. If we declare a variable in blocked scope then we must use it or else completely remove it from the block. We cannot have unused variables declared in blocked scope dangling in our source codes. Go throws unused variable errors at compile time only. We should avoid using package level variables. Go doesn’t throw unused variable errors at compile time for variables declared at package level. [Read More]