在Go编程语言中,是否可以将变量的类型作为字符串获取?

时间:2013-07-22 02:40:09

标签: go

我对Go编程语言相当不熟悉,而且我一直试图找到一种方法来将变量的类型作为字符串。到目前为止,我还没有找到任何有用的东西。我尝试使用typeof(variableName)获取变量的类型作为字符串,但这似乎没有效果。

Go是否有任何内置运算符可以将变量的类型作为字符串获取,类似于JavaScript的typeof运算符或Python的type运算符?

//Trying to print a variable's type as a string:
package main

import "fmt"

func main() {
    num := 3
    fmt.Println(typeof(num))
    //I expected this to print "int", but typeof appears to be an invalid function name.
}

2 个答案:

答案 0 :(得分:14)

如果您只想打印该类型:fmt.Printf("%T", num)将起作用。 http://play.golang.org/p/vRC2aahE2m

答案 1 :(得分:13)

TypeOf包中有reflect函数:

package main

import "fmt"
import "reflect"

func main() {
    num := 3
    fmt.Println(reflect.TypeOf(num))
}

输出:

int

更新:您更新了问题,指定您希望将类型作为字符串。 TypeOf返回Type,其Name方法将类型作为字符串返回。所以

typeStr := reflect.TypeOf(num).Name()

更新2 :为了更加彻底,我应该指出您可以在Name()上拨打String()Type之间做出选择;它们有时是不同的:

// Name returns the type's name within its package.
// It returns an empty string for unnamed types.
Name() string

// String returns a string representation of the type.
// The string representation may use shortened package names
// (e.g., base64 instead of "encoding/base64") and is not
// guaranteed to be unique among types.  To test for equality,
// compare the Types directly.
String() string