Go – about errors .

The golang come with a fair amount of functions end up returning errors like values.
The golang errors functions looking like this:

You can use the errors package and that implements functions to manipulate errors.
The official golang example:

You can see how is created the new custom errors using the New function:

The fmt package formats an error value by calling its Errorf() string method, see example:

You can add more information about the error using struct type and fields.
The error type is an interface type and can be used into this way.

And an error variable represents any value that can describe itself as a string, see example:

Go – simple or not.

In this tutorial I will show you how important it is to read the documentation in programming.
I’ll start with a simple command to detect the go language version

Most will say there are improvements and it is normal to know them.
Some of them will think that implementation is not obvious at a more general level and does not affect basic issues.
Let’s continue with the following example:

Obviously the word “Probably” will ask us a question mark.
Here’s what the documentation tells us:

func (*Int) ProbablyPrime
func (x *Int) ProbablyPrime(n int) bool
ProbablyPrime reports whether x is probably prime, applying the Miller-Rabin test with n pseudorandomly chosen bases as well as a Baillie-PSW test.

If x is prime, ProbablyPrime returns true. If x is chosen randomly and not prime, ProbablyPrime probably returns false. The probability of returning true for a randomly chosen non-prime is at most ¼ⁿ.

ProbablyPrime is 100% accurate for inputs less than 2⁶⁴. See Menezes et al., Handbook of Applied Cryptography, 1997, pp. 145-149, and FIPS 186-4 Appendix F for further discussion of the error probabilities.

ProbablyPrime is not suitable for judging primes that an adversary may have crafted to fool the test.

As of Go 1.8, ProbablyPrime(0) is allowed and applies only a Baillie-PSW test. Before Go 1.8, ProbablyPrime applied only the Miller-Rabin tests, and ProbablyPrime(0) panicked.

About prime numbers:

When a number has more than two factors it is called a composite number. Here are the first few prime numbers: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199

Although both Baillie-PSW test and Miller-Rabin tests, solve the same problem.
Knowing which version we have, we can see what is important for programming.
Also, the information like: ProbablyPrime is 100% accurate for inputs less than 2⁶⁴ are very important from a mathematical point of view.

Go – About goimport tool .

A Go developer know the code must be formatted with standard gofmt tool.
While gofmt attracks much attention, goimport is overlooked despite often being more useful.
Basically, goimport does everything that gofmt do.
First, you need to install into go using:

This will auto import Go packages using goimports tool.
While correcting, goimports removes unused imports and adds missing ones.
Additionally it groups and corrects imported packages.
You can used with vim and atom editors.
To setup vim editor to auto run goimports on save using vim-go, use this :

If you want to use the atom editor then you need to install the atom package named go-imports from abiosoft.
Use command palette cmd-shift-p, search for Go Imports: Process or using keybinding ctrl-shift-i.

Go – Using the go command .

After install go programming language from here, you will need to deal with the go command.
I’m not very good with golang , but I found some interesting issues for those who want to use go command with golang.
About go command can you read here and the go help output come with this help:

There are a few things you should know:

  • don’t use go list to see packages , use this command:go list all
  • take a look at install go on environment: go env
  • use help argument to get more help, like: go help gopath , go help env
  • see your go version  for  debug issues: go version
  • you can build your file (here called term_size.go) passing some gcflags : go build -gcflags=-m term_size.go
    # command-line-arguments
    .\term_size.go:13:25: inlining call to termbox.Size
    .\term_size.go:15:16: w escapes to heap
    .\term_size.go:15:16: h escapes to heap
    .\term_size.go:15:16: main ... argument does not escape
  • do not try this on Windows OS : go build -ldflags , first read more about: C:\Go\pkg\tool\windows_amd64\link.exe: -X flag requires argument of the form importpath.name=value
  • the Windows shell doesn’t have single quoted strings:
    go list -f "{{ .TestGoFiles }}" archive/tar
    [reader_test.go strconv_test.go tar_test.go writer_test.go]

Go – Testing Golang with android application – part 001 .

This is my first tutorial in a long series about Go and Android programming. In the limit of my free time I will try to show you how to do simple applications with the Go programming language (or known as Golang).
You need to install the Go programming language using MSI installer from here.
I set the folder with this path – C:\Go\ but my windows also put some go files under Users folder.
If you want you can to add the Go path into windows environment.
You will have this path in this case: C:\Users\your_account\go\.
The next step is to install the Android NDK from here.
I install the Windows 64-bit into Users folder. You need to install at: C:\Users\your_account\go\.
Because I don’t have a good go programming android example I used the basic default example from golang mobile.
Let’s see the commands to install and used it:

About the gomobile command then the help tell us:

If you have the adb command installed on your machine, you can use gomobile command with the argument install to push the APK to your mobile device.
I used Bluestacks emulator for android and the basic example working well.