Go每日一题 今日(2025-02-06) 的题目如下

3790 次点击 · 8 赞 ·大约8小时之前 开始浏览   · 来源「Golang来啦」

下面这段代码输出什么?

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)
}
3790 阅读
47 回复
euibieur894
euibieur894 · #1 · 3年之前

打卡

minQie
minQie · #2 · 3年之前

di

gokx
gokx · #3 · 3年之前

mark

gonglf
gonglf · #4 · 3年之前

文中有两处感觉解释不对的地方:

1、 如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。

2、 引用的这篇文章“https://www.sunansheng.com/archives/24.html”,里面说“为什么使用指针方式定义String()方法就不行了?”

1、 先说第二点“为什么使用指针方式定义String()方法就不行了?”, 微信图片_20220418105136.png

2、只要类型实现了接口的方法,就会自动使用 String() 方法,稍微改一下就不会打印出string

微信图片_20220418105855.png

henry1
henry1 · #5 · 3年之前

neil_liu
neil_liu · #6 · 3年之前

m

lanlk
lanlk · #7 · 3年之前

mark

summers
summers · #8 · 3年之前

m

Natsuwau
Natsuwau · #9 · 3年之前

mark

dingweihua
dingweihua · #10 · 3年之前

mark

feiyang
feiyang · #11 · 3年之前

mark

neil_liu
neil_liu · #12 · 3年之前

打卡

a406299736
a406299736 · #13 · 3年之前

打卡。。。。。。。。。。。

NovaChaos
NovaChaos · #14 · 3年之前

mk

hasbug
hasbug · #15 · 3年之前

mark

Zuos
Zuos · #16 · 3年之前

mark

droice
droice · #17 · 3年之前

mingtop
mingtop · #18 · 3年之前

根据 iota 的用法推断出 South 的值是 2;另外,如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。

felixzxk
felixzxk · #19 · 3年之前

m

Inforleo
Inforleo · #20 · 3年之前

m

QRQRQRqrqr
QRQRQRqrqr · #21 · 3年之前

根据 iota 的用法推断出 South 的值是 2;另外,如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。 指针方式定义String()方法不会打印: func (d *Direction) String() string { return [...]string{"North", "East", "South", "West"}[d] }

wzbwzt
wzbwzt · #22 · 3年之前

1

wzbwzt
wzbwzt · #23 · 3年之前
gonglfgonglf #4 回复

### 文中有两处感觉解释不对的地方: 1、 如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。 2、 引用的这篇文章“https://www.sunansheng.com/archives/24.html”,里面说“为什么使用指针方式定义String()方法就不行了?” 1、 先说第二点“为什么使用指针方式定义String()方法就不行了?”, ![微信图片_20220418105136.png](https://static.golangjob.cn/220418/cbcb31e924a4e2dfa54a7834f04f272d.png) 2、只要类型实现了接口的方法,就会自动使用 String() 方法,稍微改一下就不会打印出string ![微信图片_20220418105855.png](https://static.golangjob.cn/220418/ea9ba2bf951b29efced54d0f097300e7.png)

1

AntonyZhang
AntonyZhang · #24 · 3年之前

mark

a406299736
a406299736 · #25 · 2年之前
gonglfgonglf #4 回复

### 文中有两处感觉解释不对的地方: 1、 如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。 2、 引用的这篇文章“https://www.sunansheng.com/archives/24.html”,里面说“为什么使用指针方式定义String()方法就不行了?” 1、 先说第二点“为什么使用指针方式定义String()方法就不行了?”, ![微信图片_20220418105136.png](https://static.golangjob.cn/220418/cbcb31e924a4e2dfa54a7834f04f272d.png) 2、只要类型实现了接口的方法,就会自动使用 String() 方法,稍微改一下就不会打印出string ![微信图片_20220418105855.png](https://static.golangjob.cn/220418/ea9ba2bf951b29efced54d0f097300e7.png)

1

a406299736
a406299736 · #26 · 2年之前

1

wzbwzt
wzbwzt · #27 · 2年之前

1

hasbug
hasbug · #28 · 2年之前

mark

1121cczj
1121cczj · #29 · 2年之前

mark

young13
young13 · #30 · 2年之前

done

hades2013
hades2013 · #31 · 2年之前

打卡学习

haha_cat
haha_cat · #32 · 2年之前

mark 学到了

flyZ
flyZ · #33 · 2年之前

done

xutao
xutao · #34 · 2年之前

mark

YuPeng
YuPeng · #35 · 2年之前

打卡

huangyf168
huangyf168 · #36 · 2年之前

done

wonbin2011
wonbin2011 · #37 · 2年之前

毫无套路的一道题

hasbug
hasbug · #38 · 2年之前

mark

feiyang
feiyang · #39 · 2年之前

知识点:iota 的用法、类型的 String() 方法。

根据 iota 的用法推断出 South 的值是 2;另外,如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。

cllgeek
cllgeek · #40 · 2年之前

打卡

cainiaoyige01
cainiaoyige01 · #41 · 2年之前

由知识点iota推出South的值为2,Direction对int进行一层封装了,而South Direction=iota 相当于常量South为Direction对象方法String(2)==south了!

YuPeng
YuPeng · #42 · 2年之前

mark

hasbug
hasbug · #43 · 2年之前

mark

rager
rager · #44 · 2年之前
gonglfgonglf #4 回复

### 文中有两处感觉解释不对的地方: 1、 如果类型定义了 String() 方法,当使用 fmt.Printf()、fmt.Print() 和 fmt.Println() 会自动使用 String() 方法,实现字符串的打印。 2、 引用的这篇文章“https://www.sunansheng.com/archives/24.html”,里面说“为什么使用指针方式定义String()方法就不行了?” 1、 先说第二点“为什么使用指针方式定义String()方法就不行了?”, ![微信图片_20220418105136.png](https://static.golangjob.cn/220418/cbcb31e924a4e2dfa54a7834f04f272d.png) 2、只要类型实现了接口的方法,就会自动使用 String() 方法,稍微改一下就不会打印出string ![微信图片_20220418105855.png](https://static.golangjob.cn/220418/ea9ba2bf951b29efced54d0f097300e7.png)

star

WangWangZhou
WangWangZhou · #45 · 大约1年之前

iota是go语言的常量计数器,只能在常量的表达式中使用。 iotaconst关键字出现时将被重置为0

    const (
            n1 = iota //0
            n2        //1
            _
            n4        //3
        )
amocea
amocea · #46 · 11月之前

给 int 起了类型别名,但不影响其本身底层也是 int 类型,且常量声明使用 iota, 所以 South = 2, main 函数使用 fmt.Println() 时候会自动调用 String() 方法,进而调用 Direction 的方法,d = 3,所以输出 "south"

brothersam
brothersam · #47 · 4月之前

2

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传