func main() {
var val interface{} = 11
fmt.Println(reflect.ValueOf(val))
}//print out : <int Value>
但是在我将字符串(如“ Hello”)传递给val之后,它将打印出字符串本身。我注意到值结构有一个方法
func (v Value) String() string
它说如果v’type不是字符串,它将返回形式为[[T value]“的字符串,其中T是v的类型,但是,为什么不返回类似[int
11]之类的东西,我也知道我应该附加将Int()函数转换为ValueOf()以获取val的实际值,但我不了解值struct和String函数与Println函数之间的内部关系
我不是Go作家,也不是任何人,但是我认为设计是Go的三个属性的产物:
Get
源String
如果可用,fmt软件包将使用一种方法。资源首先导致的方法,如Int
,Float
,Bool
,String
这些方法等,所有会产生恐慌,如果叫上错误类型的值,除了String
。这是因为String
fmt可能会使用它,并且可能还有许多其他软件包会使用它来获取值的字符串表示形式,并且仅字符串值可打印肯定是不合理的。可以说,应该有另一种方法返回基础字符串而不是String
,但这将意味着api中的一致性较低,因此他们选择了两种方法中的一种。
反映文件
问题内容: 我所知道的打印,我们可以使用,并且我们可以使用 ,但我们仍然可以使用打印它们。那么,如果我总是习惯于打印它们怎么办?如果我这样做会发生什么问题? 问题答案: 不会有什么不好的,但是动词指示软件包打印为数字(以10为底),动词表示使用可以覆盖的 默认 格式。 请参阅以下示例: 输出(在Go Playground上尝试): 使用动词时,程序包将检查该值是否实现接口(这是一个方法),如果是,
我试图使用流按国籍对我的对象进行分组并打印出来。 但是它说:"不能解析方法'println"
我希望下面显示一个绘图,但我没有看到绘图,解释器只是挂起(我的后端报告自己为)。 我如何让情节显示? 我正在运行一个有很多迭代的模拟,并希望每1000次迭代更新我的图,以便我可以监控我的模拟是如何发展的。 下面的伪代码: 在主线程中使用绘图可能会导致绘图GUI挂起/崩溃,因为我还有其他工作要做。所以这个想法是在一个单独的线程中进行绘图。 我看到过使用进程而不是线程的建议(例如这里)。但是当我的模拟
问题内容: 我尝试检查Golang何时返回本地值为nil,然后使用此代码。 输出为0x0 但是当我只是使用println输出值时。 输出更改为0x0(0x93d40,0x0) 谁能解释这种行为的机制?谢谢! 问题答案: 首先,内建是非常不同的问题:在实现和目的上都不同。使用反射处理许多复杂的情况,而仅处理一些基本情况,并且仅用于“引导或调试”(如规范所述)。 在这种情况下,您将打印从返回的。在外观
问题内容: 我有以下代码: 如果我没有在goroutine中从缓冲区读取的代码,它会输出这样的消息,这是我期望发生的事情: 但是,将其放在goroutine中不会打印任何内容。 有人可以解释为什么吗? 问题答案: 函数完成后,您的程序将退出。这很可能在您的goroutine有时间运行并打印其输出之前发生。 一种选择是从通道读取主goroutine块,并在完成工作后将goroutine写入通道。
但是,正确的数据条目在被调用时会打印出来。我试着在网上寻找我应该做什么的答案,但我找不到任何实际可行的东西。我刚刚开始学习Java,所以可能有一个非常简单的答案,我只是忽略了。如果有人有什么想法,我将不胜感激。