下面这段代码输出什么?
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)
}
下面这段代码输出什么?
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)
}
`单行代码`
打卡
di
mark
文中有两处感觉解释不对的地方:
1、 如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。
2、 引用的这篇文章“https://www.sunansheng.com/archives/24.html”,里面说“为什么使用指针方式定义String()方法就不行了?”
1、 先说第二点“为什么使用指针方式定义String()方法就不行了?”,
2、只要类型实现了接口的方法,就会自动使用 String() 方法,稍微改一下就不会打印出string
到
m
mark
m
mark
mark
mark
打卡
打卡。。。。。。。。。。。
mk
mark
mark
卡
根据 iota 的用法推断出 South 的值是 2;另外,如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。
m
m
根据 iota 的用法推断出 South 的值是 2;另外,如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。 指针方式定义String()方法不会打印: func (d *Direction) String() string { return [...]string{"North", "East", "South", "West"}[d] }
1
1
mark
1
1
1
mark
mark
done
打卡学习
mark 学到了
done
mark
打卡
done
毫无套路的一道题
mark
知识点:iota 的用法、类型的 String() 方法。
根据 iota 的用法推断出 South 的值是 2;另外,如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。
打卡
由知识点iota推出South的值为2,Direction对int进行一层封装了,而South Direction=iota 相当于常量South为Direction对象方法String(2)==south了!
mark
mark
star
iota
是go语言的常量计数器,只能在常量的表达式中使用。iota
在const
关键字出现时将被重置为0
。给 int 起了类型别名,但不影响其本身底层也是 int 类型,且常量声明使用 iota, 所以 South = 2, main 函数使用 fmt.Println() 时候会自动调用 String() 方法,进而调用 Direction 的方法,d = 3,所以输出 "south"
2