3. What will be the output of the following Go code?
var val interface{} = 42
fmt.Println(val)
medium
A. interface{}
B. 42
C. Compilation error
D. <nil>
Solution
Step 1: Understand variable assignment
The variable val is declared as empty interface and assigned the integer 42.
Step 2: Print the value
Printing val outputs the stored value, which is 42.
Final Answer:
42 -> Option B
Quick Check:
Empty interface holds 42, prints 42 [OK]
Hint: Empty interface prints stored value directly [OK]
Common Mistakes:
Expecting the type name instead of value
Thinking it causes a compile error
Assuming it prints <nil> when assigned a value
4. Identify the error in the following Go code snippet:
var x interface{}
x = 3.14
fmt.Println(x + 1)
medium
A. No error, prints 4.14
B. Prints <nil>
C. Compile error: invalid operation on interface{}
D. Runtime panic due to type assertion failure
Solution
Step 1: Analyze the variable type
Variable x is of type interface{}, holding a float64 value 3.14.
Step 2: Check the operation
Adding 1 to x is invalid because interface{} does not support arithmetic operations directly.
Final Answer:
Compile error: invalid operation on interface{} -> Option C
Quick Check:
Cannot do math directly on interface{} [OK]
Hint: Cannot do math on interface{} without type assertion [OK]
Common Mistakes:
Assuming interface{} behaves like the stored type automatically
Expecting runtime panic instead of compile error
Ignoring the need for type assertion
5. Given a slice of empty interfaces holding mixed types:
items := []interface{}{42, "hello", 3.14, true}
Which code snippet correctly counts how many elements are of type int?
hard
A. count := 0
for _, v := range items {
if v.Type() == int {
count++
}
}
fmt.Println(count)
B. count := 0
for _, v := range items {
if v == int {
count++
}
}
fmt.Println(count)
C. count := 0
for _, v := range items {
if reflect.TypeOf(v) == "int" {
count++
}
}
fmt.Println(count)
D. count := 0
for _, v := range items {
if _, ok := v.(int); ok {
count++
}
}
fmt.Println(count)
Solution
Step 1: Understand type assertion syntax
To check if an interface{} holds an int, use v.(int) with the comma-ok idiom.
Step 2: Evaluate each option
count := 0
for _, v := range items {
if _, ok := v.(int); ok {
count++
}
}
fmt.Println(count) uses correct type assertion and counts ints. The other options use invalid comparisons or incorrect reflection usage.
Final Answer:
count := 0
for _, v := range items {
if _, ok := v.(int); ok {
count++
}
}
fmt.Println(count) -> Option D
Quick Check:
Use type assertion with comma-ok to check type [OK]
Hint: Use type assertion with comma-ok to check interface{} type [OK]
Common Mistakes:
Comparing interface{} directly to a type
Using reflect.TypeOf(v) == "int" (string instead of type)
Calling Type() method which does not exist on interface{}
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.