When comparing Golang vs Vala, the Slant community recommends Vala for most people. In the question“What are the best languages to write a desktop Linux application in?”Vala is ranked 3rd while Golang is ranked 7th. The most important reason people chose Vala is:

Underneath there is C. It makes some stuff easier to write than it would be with plain C code.

Pros

Pro

Goroutines are "lightweight threads" that runs on OS threads. They provide a simple way for concurrent operations — prepending a function with go will execute it concurrently. It utilizes channels for communication between goroutines which aids to prevent races and makes synchronizing execution effortless across goroutines. The maximum number of OS threads goroutines can run on may be defined at compile time with the GOMAXPROCS variable.

Pro

Simplified C-like syntax that is as easy to read and write as Python

The language is designed in a manner that seems logical. Syntax is simplified to reduce burden on the programmer and compiler developers.

Pro

Great team working behind it

Go has a solid team of engineers working on it (some of the best networking engineers in the world are working on Go). Up until now, the great engineering of the language has compensated for its lack of power.

Pro

API documentation is rich in content; easy to memorize

Only features deemed critical are added to the language to prevent cruft from working it's way into the language. The language is small enough to fit inside one's head without having to repeatedly open documentation. Documentation is hosted on an official webpage in a manner that is simple to read and understand.

Pro

Compiled binaries are fast — about as fast in C in most cases. Compiles on every OS without effort — truly cross-platform compiler. As a result of the fast compilation speed, you can use the gorun program to use go source code as if it was a scripting language.

Pro

Easy to install and configure; simple to compile software

Go software can be immediately installed, regardless of your operating system, package manager, or processor architecture with the go get command. Software is compiled statically by default so there is no need to worry about software dependencies on the client system. Makefiles and headers are no longer necessary, as the package system automatically resolves dependencies, downloads source code and compiles via a single command: go build.

Pro

Built-in unit testing

The idiomatic approach to writing a Go software project is to perform test-driven development with unit testing. Every source code file should have an associated *_test.go file which tests functions in the code.

Pro

Programmers don't have to argue over what 10% subet of the language to implement in their software project

The language promotes programming in a specific idiomatic style, which helps keep every programmer on the same page.

Pro

Automatically generates API documentation for installed packages

Godoc is provided to automatically generate API documentation for Go projects. Godoc also hosts it’s own self-contained web server that will list documentation for all installed packages in your Go path.

Pro

Demonstrates a unique, simple concept to object-oriented programming.

All types are essentially objects, be they type aliases or structs. The compiler automatically associates types to their methods at compile time. Those methods are automatically associated to all interfaces that match. This allows you to gain the benefits of multiple inheritance without glue code. As a result of the design, classes are rendered obsolete and the resulting style is easy to comprehend.

Pro

Supports splitting source code into multiple files

As long as every source code file in a directory has the same package name, the compiler will automatically concatenate all of the files together during the compilation process.

Pro

Great language for building networking services

Go was started as a systems language but now it has fully committed in the niche of networking services. This has been a brilliant move by Go because it allows them to capitalize on the immense talent of the Go engineering team (who are in the most part network engineers).

In a world dominated by Java EE and slow scripting language, Go was a breath of fresh air and it continues to be one of the most powerful languages if you want to build networking services.

Pro

Supports 'modules' in the form of packages.

Every Go source file contains a package line that indicates which package a file belongs to. If the name of the package is 'main', it indicates that this is a program that will be compiled into a binary. Otherwise, it will recognize that it is a package.

Multiple variables may be assigned on a single line.

Pro

Supports functional programming techniques such as function literals.

This naturally also supports first class and high order functions, so you may pass functions as variables to other functions.

Pro

Syntax for exported code from a package is simplified to be less verbose than other languages

Any variable, type and function whose name begins with a capital letter will be exported by a project, while all other code remains private. There is no longer a need to signify that a piece of code is 'private' or 'public' manually.

Pro

Performance is on the order of C and Java

Go is blazing fast, but easier to write than Python, JS, Ruby, or many other dynamic languages.

Pro

Fast

Underneath there is C. It makes some stuff easier to write than it would be with plain C code.

Pro

Easy Syntax

Vala is syntactically similar to C# and includes several features such as: anonymous functions, signals, properties, generics, assisted memory management, exception handling, type inference, and foreach statements

Pro

Rich GTK Support

Vala developed by Gnome peoples

Pro

Well-integrated with C language

Vala itself is compiled to C. therefore it can use the vast ecosystem of C language, with least effort.

Pro

Good documentation

Cons

Con

Hard to abstract even the simplest notions

Go is famously regarded as very simple. However, this simplicity becomes problematic in time. Programmers who use Go find themselves over and over again writing the same thing from a very low point of view. Domains not already served by libraries that are easy to glue are very difficult to get into.

Con

Designed to make the programmer expendable

Go was designed for large team projects where many contributors may be incompetent. That Go can still get things done under these conditions is a testament to its utility in this niche. Go's infamously weak abstraction power is thus a feature, not a bug, meant to prevent your teammates from doing too much damage. This also means any team member can be easily replaced by another code monkey at minimum cost. Good for the company, bad for you. The more talented programmers, on the other hand, will be very frustrated by having one hand tied behind their back.

Con

Expects prior familiarity with tooling, "advanced" OS use

A standard step of even installing Go is modifying your path -- a person who's encountering their first language might not even understand. It's hard to escape using Go without familiarity with using build tools, managing and organizing project directories, etc. It's not as simple as Python's "just run the .py file with the interpreter."

Con

Performance slowdown because of indirect calls and garbage collection

Practically no meaningful Go application can be written without indirect function calls and garbage collection, these are central to Go's core infrastructure. But these are major impediments to achieving good performance.

Con

Implementation of interfaces are difficult to figure out

Finding out what interfaces are implemented by a struct requires a magic crystal ball. They are easy to write, but difficult to read and trawl through.