7

我对 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.
}
4

2 回答 2

14

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

于 2013-07-22T02:42:20.247 回答
13

包里面有个TypeOf函数reflect

package main

import "fmt"
import "reflect"

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

这输出:

整数

更新:您更新了您的问题,指定您希望类型为字符串。 TypeOf返回 a 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
于 2013-07-22T02:43:29.267 回答