Go每日一题(13) 的题目如下

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

下面这段代码能否通过编译,如果可以,输出什么?

func main() {
	s1 := []int{1, 2, 3}
	s2 := []int{4, 5}
	s1 = append(s1, s2)
	fmt.Println(s1)
}
4372 阅读
47 回复
Ge-go
Ge-go · #1 · 3年之前

s1 = append(s1,s2...) 需要用语法糖将切片进行拆分

sansuidulunyu
sansuidulunyu · #2 · 3年之前

啥时候出专栏,把历史的每日一题放一起

polaris
polaris · #3 · 3年之前
sansuidulunyusansuidulunyu #2 回复

啥时候出专栏,把历史的每日一题放一起

目前故意隐藏了历史题目,希望大家坚持做。

如果每天对当天题目做了回复,在你的所有评论中可以找到历史题目

pudding42
pudding42 · #4 · 3年之前

不行,s2需要 unpack: s1 = append(s1,s2...)

brothersam
brothersam · #5 · 3年之前

错,append(s1,s2...)

这个题目迷惑性不强,s2 := []int{4},就更具迷惑性了。

feiyang
feiyang · #6 · 3年之前

mark

gonglf
gonglf · #7 · 3年之前
brothersambrothersam #5 回复

错,append(s1,s2...) 这个题目迷惑性不强,s2 := []int{4},就更具迷惑性了。

你是魔鬼吗?你是八股文的始作俑者吧?

qiaoshuai951123
qiaoshuai951123 · #8 · 3年之前

打卡

mingtop
mingtop · #9 · 3年之前

每天一题

sanwubufang
sanwubufang · #10 · 3年之前

mark

Zuos
Zuos · #11 · 3年之前

mark

TimLiuDream
TimLiuDream · #12 · 3年之前

mark

one_xian_yu
one_xian_yu · #13 · 3年之前

打卡

NovaChaos
NovaChaos · #14 · 3年之前

mk

brothersam
brothersam · #15 · 3年之前

不能。改成 s1 = append(s1, s2...) 就好了。后一个参数是一系列值,不能是切片。

Payne_F
Payne_F · #16 · 3年之前

mark

feiyang
feiyang · #17 · 3年之前

将一个切片追加到另一个切片上:append(s1,s2…)

hypersus
hypersus · #18 · 3年之前

无坑打卡

QRQRQRqrqr
QRQRQRqrqr · #19 · 3年之前

切片append需要...

feiyang
feiyang · #20 · 3年之前
feiyangfeiyang #17 回复

将一个切片追加到另一个切片上:append(s1,s2…)

append() 的第二个参数不能直接使用 slice,需使用 … 操作符

bsdx866
bsdx866 · #21 · 2年之前

image.png

feiyang
feiyang · #22 · 2年之前
feiyangfeiyang #20 回复

#17楼 @feiyang append() 的第二个参数不能直接使用 slice,需使用 … 操作符

append() 的第二个参数不能直接使用 slice,需使用 … 操作符

gobody
gobody · #23 · 2年之前

第一次看到append(s1, s2...)这样的语法糖,学到了!

jatshw
jatshw · #24 · 2年之前

append() 的第二个参数不能直接使用 slice,需使用 … 操作符 学到了

flyZ
flyZ · #25 · 2年之前

mark

YuPeng
YuPeng · #26 · 2年之前

mark

huangyf168
huangyf168 · #27 · 2年之前

mark

feiyang
feiyang · #28 · 2年之前

在 Golang 中,参数 ...(称为 ellipsis 或 variadic)表示可以接收任意数量的参数,这些参数将被转换为一个切片,以在函数中使用。

func myFunc(args ...int) {
    for _, arg := range args {
        fmt.Println(arg)
    }
}

myFunc(1, 2, 3) // 输出: 1 2 3

在 Golang 中,... 用于将 slice 展开为可变参数列表,使其能够传递给期望接收可变参数的函数。在这种情况下,... 是一个语法糖,它允许我们将 slice 的每个元素视为一个单独的参数。因此,当我们调用一个期望接收可变参数的函数时,可以传递一个 slice,并将其展开为一个参数列表。

如果在 slice 后面加上 ellipsis,例如 slice1.append(slice1, slice2...),实际上是将 slice2 展开为一个参数列表,并将其作为参数传递给 append 函数。这将导致 slice2 中的每个元素都被添加到 slice1 中。

需要注意的是,... 语法只能用于最后一个参数,用于将 slice 展开为可变参数列表。如果在其他位置使用 ...,则会导致编译错误。

hupeng
hupeng · #29 · 2年之前

mark

hasbug
hasbug · #30 · 2年之前

mark

yaoyt1
yaoyt1 · #31 · 2年之前

提示报错 ,append时候第二个参数如果是切片的 时候需要展开 (...)

java_to_go
java_to_go · #32 · 2年之前

打卡

euibieur894
euibieur894 · #33 · 2年之前

打卡

YuPeng
YuPeng · #34 · 2年之前

mark

omezro
omezro · #35 · 2年之前

func main() { s1 := []int{1, 2, 3} s2 := []int{4, 5} s1 = append(s1, s2...) // fmt.Println(s1) }

cllgeek
cllgeek · #36 · 2年之前

mark

hasbug
hasbug · #37 · 2年之前

mark

sisul
sisul · #38 · 2年之前

mark

BigBigGopher
BigBigGopher · #39 · 大约1年之前

mk

Cyjmisaki
Cyjmisaki · #40 · 大约1年之前

mark

Qmfuser
Qmfuser · #41 · 大约1年之前

mark

zhangwei_go
zhangwei_go · #42 · 大约1年之前

append(s1,s2…)

BigBigGopher
BigBigGopher · #43 · 大约1年之前

append(s1,s2...)

zhanghzong
zhanghzong · #44 · 大约1年之前

image.png

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

打卡

hengbo
hengbo · #46 · 大约1年之前

不能通过编译, s1 = append(s1, s2) 需要改成 s1 = append(s1, s2...) 解构一下

zhangwei_go
zhangwei_go · #47 · 5月之前

不能通过编译。append() 的第二个参数不能直接使用 slice,需使用 … 操作符,将一个切片追加到另一个切片上:append(s1,s2…)。或者直接跟上元素,形如:append(s1,1,2,3)。

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