【问题标题】:Can I use interfaces as dynamic variables?我可以将接口用作动态变量吗?
【发布时间】:2021-07-02 03:21:55
【问题描述】:

Go doesn't have dynamic variables.

也就是说,我想知道变量“a”是什么,在下面的这个程序中,一旦我可以将它用作整数和字符串。即使是条件语句也可以很好地使用它

package main

import (
    "fmt"
)

func main() {
    var a interface{}
    myInt := 1
    myString := "hi"
    
    a = myInt
    if a == 1 {
        fmt.Println("equals to 1")
    }
    
    a = myString
    if a == "hi" {
        fmt.Println(a)
    }
}

【问题讨论】:

  • 也许这个例子会有所帮助:play.golang.org/p/wjlz9rluakh
  • 条件表达式可能有效,但您不能将其用作 int 或字符串。例如,您不能使用a + 1
  • "我可以将接口用作动态变量吗?"问也没有意义。 Go 中没有“动态变量”(无论这意味着什么)。 Go 1 中有一定数量的多态性,这是通过接口类型完成的。请参加 Go 之旅以了解接口。

标签: go variables


【解决方案1】:

您可以使用类型开关:

package main

func main() {
   var a interface{} = 1

   switch aType := a.(type) {
   case string:
      println("string", aType)
   case int:
      println("int", aType)
   }
}

https://golang.org/ref/spec#Type_switches

【讨论】:

    【解决方案2】:

    要确定您可以使用reflect.TypeOf() 的“a”变量类型,我重新创建了您的代码,如下所示:

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func main() {
        var a interface{}
        myInt := 1
        myString := "hi"
    
        a = myInt
        if a == 1 {
            fmt.Println("equals to 1")
            fmt.Println(reflect.TypeOf(a))
        }
    
        a = myString
        if a == "hi" {
            fmt.Println(a)
            fmt.Println(reflect.TypeOf(a))
        }
    }
    

    输出:

    equals to 1
    int
    hi
    string
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 2023-03-17
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多