你好哇,再坚持一周就到国庆长假啦!
一起来看下
1.下面这段代码输出什么?
type Direction int
const (
North Direction = iota
East
South
West
)
func (d Direction) String() string {
return [...]string{"North", "East", "South", "West"}[d]
}
func main() {
fmt.Println(South)
}
参考答案及解析:South。知识点:iota 的用法、类型的 String() 方法。
根据 iota 的用法推断出 South 的值是 3;另外,如果类型定义了 String() 方法,当使用 fmt.Printf()
、fmt.Print()
和 fmt.Println()
会自动使用 String() 方法,实现字符串的打印。
2.下面代码输出什么?
type Math struct {
x, y int
}
var m = map[string]Math{
"foo": Math{2, 3},
}
func main() {
m["foo"].x = 4
fmt.Println(m["foo"].x)
}
- A. 4
- B. compilation error
参考答案及解析:B,编译报错 cannot assign to struct field m["foo"].x in map
。错误原因:对于类似 X = Y
的赋值操作,必须知道 X
的地址,才能够将 Y
的值赋给 X
,但 go 中的 map 的 value 本身是不可寻址的。
有两个解决办法:
1.使用临时变量
type Math struct {
x, y int
}
var m = map[string]Math{
"foo": Math{2, 3},
}
func main() {
tmp := m["foo"]
tmp.x = 4
m["foo"] = tmp
fmt.Println(m["foo"].x)
}
2.修改数据结构
type Math struct {
x, y int
}
var m = map[string]*Math{
"foo": &Math{2, 3},
}
func main() {
m["foo"].x = 4
fmt.Println(m["foo"].x)
fmt.Printf("%#v", m["foo"]) // %#v 格式化输出详细信息
}
解析若有不妥之处,欢迎在留言区交流、指正!
看下今天的题目:
func main() {
fmt.Println([...]int{1} == [2]int{1})
fmt.Println([]int{1} == []int{1})
}
2.一道很有代表性的题目,很多老司机都因此翻车!
下面这段代码输出什么?如果编译错误的话,为什么?
- A. 5 5
- B. runtime error
答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!
所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!
如果我的文章对你有所帮助,点赞、转发都是一种支持!