package main
import "fmt"
type T struct {
x int
}
func (t T) String() string { return "boo" }
func main() {
t := T{123}
fmt.Printf("%v\n", t)
fmt.Printf("%#v\n", t)
}
Answer
Try it
boo
main.T{x:123}
print1
package main
import (
"fmt"
)
func f(a ...int) {
fmt.Printf("%#v\n", a)
}
func main() {
f()
}
Answer
Try it
[]int(nil)
race
type Stats struct {
mutex sync.Mutex
counters map[string]int
}
func (s *Stats) Snapshot() map[string]int {
s.mutex.Lock()
defer s.mutex.Unlock()
return s.counters
}
func (s *Stats) Add(name string, num int) {
s.mutex.Lock()
defer s.mutex.Unlock()
s.counters[name] = num
}
Answer
func (s *Stats) Snapshot() map[string]int {
s.mutex.Lock()
defer s.mutex.Unlock()
result := make(map[string]int, len(s.counters))
for k, v := range s.counters {
result[k] = v
}
return result
}
select
package main
import "sync"
func main() {
var wg sync.WaitGroup
foo := make(chan int)
bar := make(chan int)
wg.Add(1)
go func() {
defer wg.Done()
select {
case foo <- <-bar:
default:
println("default")
}
}()
wg.Wait()
}
Answer
Try it
fatal error: all goroutines are asleep - deadlock!
select1
package main
import "fmt"
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
ch1 <- 1
}()
go func() {
select {
case <-ch1:
case ch2 <- 2:
}
}()
fmt.Println(<-ch2)
}
- A. 1
- B. 2
- C. No output, program is deadlocked
- D. No output, program has finished execution.
- E. else
Answer
Try it
B
slice
package main
import (
"fmt"
)
func main() {
var s1 []int
var s2 = []int{}
if __ == nil {
fmt.Println("nil slice")
}
if __ != nil {
fmt.Println("empty slice")
}
}
- A. s1, s2
- B. s2, s1
- C. s1, s1
- D. s2, s2
Answer
Try it
A
slice1
package main
import (
"fmt"
)
func main() {
s := [3]int{1, 2, 3}
a := s[:0]
b := s[:2]
c := s[1:2:cap(s)]
fmt.Println(len(a), cap(a))
fmt.Println(len(b), cap(b))
fmt.Println(len(c), cap(c))
}
Answer
Try it
0 3
2 3
1 2
slice2
package main
import "fmt"
func main() {
s1 := []int{1, 2, 3}
s2 := s1[1:]
s2[1] = 4
fmt.Println(s1)
s2 = append(s2, 5, 6, 7)
fmt.Println(s1)
}
Answer
Try it
[1 2 4]
[1 2 4]
variable
- A. p.name
- B. (&p).name
- C. (*p).name
- D. p->name
Answer
AC
variable1
package main
import (
"fmt"
)
func main() {
var ans float64 = 15 + 25 + 5.2
fmt.Println(ans)
}
- A. 45
- B. 45.0
- C. 45.2
- D. compliation error
Answer
Try it
C
variable2
package main
import (
"fmt"
)
func main() {
var ans float64 = 3 / 2
fmt.Println(ans)
}
- A. 1.5
- B. 1
- C. 0
- D. compliation error
Answer
Try it
B
variable3
package main
func main() {
const a int8 = -1
var b int8 = -128 / a
println(b)
}
Answer
Try it
compliation error
-128 / a (constant 128 of type int8) overflows int8
variable4
package main
func main() {
var a int8 = -1
var b int8 = -128 / a
println(b)
}
Answer
Try it
-128
variable5
package main
import "fmt"
type MyInt1 int
type MyInt2 = int
func main() {
var i int =0
var i1 MyInt1 = i
var i2 MyInt2 = i
fmt.Println(i1, i2)
}
Answer
Try it
compilation error
cannot use i (variable of type int) as MyInt1 value in variable declaration
variable6
package main
import "fmt"
func main() {
const X = 7.0
var x interface{} = X
if y, ok := x.(int); ok {
fmt.Println(y)
} else {
fmt.Println(int(y))
}
}
- A. 7
- B. 7.0
- C. 0
- D. compilation error
Answer
Try it
C