Go: Difference between revisions

From Rixort Wiki
Jump to navigation Jump to search
No edit summary
 
(20 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Variables ==
Variables are defined as:
var name type = value
For example:
var x string = "Hello"
The type can be inferred if an initial value is given, e.g.
var x = "Hello"
or by using the <code>:=</code> operator:
x := "Hello"
Constants can be defined by using the <code>const</code> keyword instead of <code>var</code>.
== Loops ==
Go only supports the <code>for</code> loop - unlike other languages it lacks <code>while</code>, <code>do while</code> etc. However, it is possible to emulate other loop constructs using <code>for</code>.
== Imports ==
Standard import notation:
import "fmt"
Multiple imports can be done either one line at a time or as a group:
import (
  "fmt"
  "math"
)
The group format is preferred and used by gofmt.
Names in packages are exported if they begin with a capital letter.
== Cross compiling ==
Cross compiling is easy with Go, using two environment variables:
<code>GOOS</code>: The operating system to target. Options are: <code>windows</code> (Microsoft Windows), <code>darwin</code> (macOS) and <code>linux</code>.
<code>GOARCH</code>: The architecture to target.
== GUI programming ==
=== Walk ===
* Only works on Windows(?)
=== andlabs UI ===
* Cross-platform
* No commits since June 2020
* Lots of unresolved issues on GitHub
=== Qt ===
* therecipe/qt on GitHub
* No commits since September 2020
* Qt licensing unclear
=== Shiny ===
* Experimental
* Current state of development unclear
=== Nuklear ===
* No commits since March 2020
=== Fyne ===
Dependencies on Ubuntu:
* libgl1-mesa-dev
* xorg-dev
=== GTK ===
* Can't cross-compile(?)
Dependencies for GTK on Ubuntu:
* libglib2.0-dev
* libgdk-pixbuf-2.0-dev (or libgdk-pixbuf2.0-dev)
* libpango1.0-dev
* libgtk2.0-dev
== Libraries ==
* [https://github.com/getlantern/systray systray] - Place your Go application in the system tray. Cross-platform.
== Articles ==
* [https://github.com/enocom/gopher-reading-list A Gopher's Reading List]
* [https://medium.com/@IndianGuru/best-practices-for-a-new-go-developer-8660384302fc Best practices for a new Go developer]
* [https://medium.com/@mattholt/packaging-a-go-application-for-macos-f7084b00f6b5 Packaging a Go application for macOS]
* [https://words.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/ Shrink your Go binaries with this one weird trick]
* [https://blog.felixge.de/go-arm64-function-call-assembly/ Go arm64 Function Call Assembly]
* [https://freshman.tech/web-development-with-go/ How to Build Your First Web Application with Go]
* [https://www.madhur.co.in/blog/2023/06/10/processing-huge-log-files.html Process huge log files]
* [https://trinitroglycerin.github.io/2023/06/10/Go-Using-pointers-to-reduce-copies-is-premature-optimization/ Go: Using pointers to reduce copies is premature optimization]
* [https://technology.blog.gov.uk/2013/12/05/building-a-new-router-for-gov-uk/ Building a new router for GOV.UK]
* [https://lemire.me/blog/2023/02/07/bit-hacking-with-go-code/ Bit Hacking with Go code]
* [https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/ Gopher Wrangling. Effective error handling in Go]
== Talks ==
* [http://talks.golang.org/2012/splash.article Go at Google: Language Design in the Service of Software Engineering]
* [https://talks.golang.org/2015/go-for-java-programmers.slide Go for Java Programmers]
== Tutorials ==
* [http://learnxinyminutes.com/docs/go/ Learn Go in Y minutes]
* [https://gobyexample.com/ Go by example]
* [http://tour.golang.org/welcome/1 A tour of Go]
* [http://golang.org/doc/effective_go.html Effective Go]
* [https://dave.cheney.net/high-performance-go-workshop/gophercon-2019.html High Performance Go Workshop]
== Books ==
== Books ==


* [https://miek.nl/go/ Learning Go]
* [https://miek.nl/go/ Learning Go]


[[Category:Go]]
[[Category:Programming]]
[[Category:Programming]]

Latest revision as of 16:09, 20 June 2023

Variables

Variables are defined as:

var name type = value

For example:

var x string = "Hello"

The type can be inferred if an initial value is given, e.g.

var x = "Hello"

or by using the := operator:

x := "Hello"

Constants can be defined by using the const keyword instead of var.

Loops

Go only supports the for loop - unlike other languages it lacks while, do while etc. However, it is possible to emulate other loop constructs using for.

Imports

Standard import notation:

import "fmt"

Multiple imports can be done either one line at a time or as a group:

import (
  "fmt"
  "math"
)

The group format is preferred and used by gofmt.

Names in packages are exported if they begin with a capital letter.

Cross compiling

Cross compiling is easy with Go, using two environment variables:

GOOS: The operating system to target. Options are: windows (Microsoft Windows), darwin (macOS) and linux.

GOARCH: The architecture to target.

GUI programming

Walk

  • Only works on Windows(?)

andlabs UI

  • Cross-platform
  • No commits since June 2020
  • Lots of unresolved issues on GitHub

Qt

  • therecipe/qt on GitHub
  • No commits since September 2020
  • Qt licensing unclear

Shiny

  • Experimental
  • Current state of development unclear

Nuklear

  • No commits since March 2020

Fyne

Dependencies on Ubuntu:

  • libgl1-mesa-dev
  • xorg-dev

GTK

  • Can't cross-compile(?)

Dependencies for GTK on Ubuntu:

  • libglib2.0-dev
  • libgdk-pixbuf-2.0-dev (or libgdk-pixbuf2.0-dev)
  • libpango1.0-dev
  • libgtk2.0-dev

Libraries

  • systray - Place your Go application in the system tray. Cross-platform.

Articles

Talks

Tutorials

Books