30 basic questions to measure your Golang knowledge. Answers and .go files you can find on GitHub page.

Don’t hesitate to create a Pull Request in case of some found errors, typos.

What’s the output of the following code?
package main

import "fmt"

const (
	a = iota
	b = iota
	c = iota
)

const (
	d, e, f = iota, iota, iota
)

func main() {
	fmt.Println(a, b, c, d, e, f)
}
  • a. 0 1 2 3 4 5
  • b. 0 1 2 0 1 2
  • c. 0 1 2 0 0 0
  • d. 0 0 0 0 1 2
What verb should we use with fmt.Printf to print boolean?
  • a. %v
  • b. %t
  • c. %b
  • d. %s
Does Go support type inheritance?
  • a. Yes
  • b. No
Is it possible to declare multiple types of variables in single declaration in Go?

var a, b, c = 3, 4, “foo”

  • a. Yes
  • b. No
Is it possible to make package content directly accessible without need to be preceed by “fmt.”?
  • a. Yes. import “fmt”
  • b. Yes. import _ “fmt”
  • c. Yes. import . “fmt”
  • d. No
Is it possible to have multiple tag strings in struct field?
package main

import (
	"fmt"
	"reflect"
)

func main() {
	type User struct {
		Name string `key:"name"`
	}

	u := User{}
	st := reflect.TypeOf(u)
	field := st.Field(0)
	fmt.Println(field.Tag.Get("key"))
}```

 - a. Yes. They should be comma-separated: `key:"name",maxlength:"128"`
 - b. Yes. They should be space-separated: `key:"name" maxlength:"128"`
 - c. No

##### What is the output of the following code?

package main

import “fmt”

func main() { for i := 0; i < 4; i++ { defer fmt.Print(i) } }


 - a. 0123
 - b. 3210
 - c. 0000
 - d. 3333

##### What characters is *go fmt* command using for indent?

 - a. 4 spaces
 - b. 2 spaces
 - c. tab character
 - d. it's configurable

##### Choose the correct statement regarding the output of the following code.

package main

import “fmt”

func main() { tagsViews := map[string]int{ “unix”: 0, “python”: 1, “go”: 2, “golang”: 3, “devops”: 4, “gc”: 5, } for key, views := range tagsViews { fmt.Println(“There are”, views, “views for”, key) } }


 - a. Output will be ordered by values
 - b. Output will be ordered by keys
 - c. Output will be ordered randomly
 - d. Output will be ordered by position in the code

##### How can we change the value of GOMAXPROCS in Go?

 - a. Via environment variable GOMAXPROCS
 - b. In the code
 - c. a and b
 - d. Impossible as it's equal to the number of available CPUs

##### Which is the slowest concatenation method from the list?

package main

import ( “bytes” “fmt” “strings” )

func main() { // 1 s := “” for i := 0; i < 5; i++ { s += “a” } fmt.Println(s)

// 2
var buffer bytes.Buffer
for i := 0; i < 5; i++ {
    buffer.WriteString("a")
}
fmt.Println(buffer.String())

// 3
sl := []string{"a", "a", "a", "a", "a"}
fmt.Printf(strings.Join(sl, ""))

}


 - a. 1
 - b. 2
 - c. 3

##### What's the output of the following code?

package main

import “fmt”

func main() { var a int8 = 3 var b int16 = 4

sum := a + b

fmt.Println(sum)

}


 - a. 7
 - b. 4
 - c. 3
 - d. invalid operation: a + b (mismatched types int8 and int16)

##### Where should we use *defer* in the following code?

package main

import “os”

func main() { src, err := os.Open(“filename”) // 1 //defer src.Close() if err != nil { return }

// 2
//defer src.Close()

src.WriteString("Hello")

// 3
//defer src.Close()

}


 - a. 1
 - b. 2
 - c. 3
 - d. None of them

##### On what data types you can use "for - range" statement?

 - a. array, slice, map
 - b. array, slice, map, string
 - c. slice, map, string
 - d. slice, map

##### Does Go support optional parameters in functions?

 - a. Yes
 - b. No

##### When will init() function be called?

 - a. Before main() function in main package
 - b. After importing a package with defined init() function
 - c. Only when you call it
 - d. a and b

##### Does Go have a ternary operator?

 - a. Yes
 - b. No

##### Is it possible to check if the slices are equal with "==" operator or not?

 - a. Yes
 - b. No

##### What is the size of the following struct?

package main

import “fmt” import “unsafe”

func main() { s := struct { A float32 B string }{0, “go”}

fmt.Printf("%T, %d\n", s, unsafe.Sizeof(s))

}


 - a. 12
 - b. 8
 - c. 24
 - d. 32

##### What's the default buffer size of the channel in Go?

 - a. 0
 - b. 1
 - c. No default size

##### What are the default values of these types: string,`*string` ?

 - a. "", nil
 - b. "", ""
 - c. nil, nil
 - d. nil, ""

##### Is it possible to define constant of an array type float32?

package main

import “fmt”

const array = []float32{0.1, 0.2, 0.3}

func main() { fmt.Printf(“%v”, array) }


 - a. Yes
 - b. No

##### Can short declaration ":=" be used for defining global variables?

 - a. Yes
 - b. No

##### In Go, does a *break* statement exit from a *select* block?

 - a. Yes
 - b. No

##### Which one of the following is correct?

 - a. const Pi = math.Pi
 - b. const Pi = 3.14
 - c. both a and b are correct
 - d. None of the above

##### Arrays are value types. In case of arrays perform as arguments, functions get their copies instead of a reference. Don’t they?

 - a. Yes
 - b. No

##### Which of the following variables are exportable from another external package?

package main

var ( aName string

BigBro string

爱 string

)

func main() {

}


 - a. aName, BigBro
 - b. BigBro
 - c. aName, BigBro, 爱
 - d. BigBro, 爱

##### What's the sequence for the output of the following code?

package main

import ( “fmt” “sync” “time” )

func main() { var wg sync.WaitGroup

wg.Add(1)
go func() {
    time.Sleep(time.Second * 2)
    fmt.Println("1")
    wg.Done()
}()

go func() {
    fmt.Println("2")
}()

wg.Wait()
fmt.Println("3")

}


 - a. 3 2 1
 - b. 1 2 3
 - c. 2 3 1
 - d. 2 1 3

##### How to compile the following code to the binary file with name "eight"?

package main

import “fmt”

func main() { fmt.Println(“Hi”) }


 - a. go build 8.go eight
 - b. go build -o eight 8.go
 - c. go build 8.go -o eight

##### Can we set DEBUG=true with *go build*?

package main

import ( “fmt” )

var DEBUG bool

func main() { fmt.Printf(“DEBUG is %t\n”, DEBUG) } ```

  • a. Yes. go build -ldflags ‘-X main.DEBUG=true’ 99.go
  • b. No