一个 GO 语言的疑问,初学勿喷😐

2018-02-28 17:22:57 +08:00
 lambdaxs

GO 语言

//可以进行赋值
var a interface{}
var b int
a = b

//a = b 编译器报错 
var a []interface{}
var b []int
a = b

为什么 interface 类型的切片就没法直接转换赋值?

3061 次点击
所在节点    程序员
12 条回复
lambdaxs
2018-02-28 17:24:08 +08:00
顶一哈! d=====( ̄▽ ̄*)b
brickyang
2018-02-28 17:28:05 +08:00
切片的底层是数组,这样相当于把两个不同类型的数组进行赋值

https://blog.go-zh.org/go-slices-usage-and-internals
zhs227
2018-02-28 17:29:06 +08:00
这是数组赋值 ,不是接口转换。
Shadas
2018-02-28 17:30:45 +08:00
lambdaxs
2018-02-28 17:31:37 +08:00
@brickyang get 应该写成 var a interface{}; var b []int ;a = b;
lambdaxs
2018-02-28 17:34:56 +08:00
@Shadas get
是可以写成这样
a := []int{1,2,3}
b := make([]interface{}, len(a))
for i, d := range a {
b[i] = a
}
Michaelssss
2018-02-28 17:40:43 +08:00
....你这不是 Go 初学。。。你是 C 都没学。。。


=是赋值,你的切片都不是值只是一个 symbol,你怎么赋值。。。
flyzero
2018-02-28 17:44:51 +08:00
@Michaelssss 看你头像和我 boss 一样,逃
pmispig
2018-02-28 17:56:39 +08:00
var a interface{}
var b []int
a = b
这样可以
lambdaxs
2018-02-28 17:59:49 +08:00
@Michaelssss
var a []int
var b []int
a = b
是可以的😐
lambdaxs
2018-02-28 17:59:59 +08:00
@Michaelssss

var a []int
var b []int
a = b
是可以的😐
douglarek
2018-02-28 19:05:18 +08:00
第一种 int 是 interface{} 第二种是不同的 slice,类型不同而且不存在父子关系

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/433568

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX