• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lambdaxs
V2EX  ›  程序员

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

  •  
  •   lambdaxs · Feb 28, 2018 · 3963 views
    This topic created in 3180 days ago, the information mentioned may be changed or developed.

    GO 语言

    //可以进行赋值
    var a interface{}
    var b int
    a = b
    
    //a = b 编译器报错 
    var a []interface{}
    var b []int
    a = b
    

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

    12 replies  •  2018-02-28 19:05:18 +08:00
    lambdaxs
    lambdaxs
    OP
    Feb 28, 2018
    1
    顶一哈! d=====( ̄▽ ̄*)b
    brickyang
    brickyang
    Feb 28, 2018❤️1
    2
    切片的底层是数组,这样相当于把两个不同类型的数组进行赋值

    https://blog.go-zh.org/go-slices-usage-and-internals
    zhs227
    zhs227
    Feb 28, 2018❤️1
    3
    这是数组赋值 ,不是接口转换。
    lambdaxs
    lambdaxs
    OP
    Feb 28, 2018
    5
    @brickyang get 应该写成 var a interface{}; var b []int ;a = b;
    lambdaxs
    lambdaxs
    OP
    Feb 28, 2018
    6
    @Shadas get
    是可以写成这样
    a := []int{1,2,3}
    b := make([]interface{}, len(a))
    for i, d := range a {
    b[i] = a
    }
    Michaelssss
    Michaelssss
    Feb 28, 2018
    7
    ....你这不是 Go 初学。。。你是 C 都没学。。。


    =是赋值,你的切片都不是值只是一个 symbol,你怎么赋值。。。
    flyzero
    flyzero
    Feb 28, 2018
    8
    @Michaelssss 看你头像和我 boss 一样,逃
    pmispig
    pmispig
    Feb 28, 2018
    9
    var a interface{}
    var b []int
    a = b
    这样可以
    lambdaxs
    lambdaxs
    OP
    Feb 28, 2018
    10
    @Michaelssss
    var a []int
    var b []int
    a = b
    是可以的😐
    lambdaxs
    lambdaxs
    OP
    Feb 28, 2018
    11
    @Michaelssss

    var a []int
    var b []int
    a = b
    是可以的😐
    douglarek
    douglarek
    Feb 28, 2018
    12
    第一种 int 是 interface{} 第二种是不同的 slice,类型不同而且不存在父子关系
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2099 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:48 · PVG 16:48 · LAX 00:48 · JFK 03:48
    ♥ Do have faith in what you're doing.