当前位置: 首页 > 面试题库 >

为什么Golang在使用不同的输出功能时显示不同的值

钱志
2023-03-14
问题内容

我尝试检查Golang何时返回本地值为nil,然后使用此代码。

package main

import (
    "fmt"
)

type S struct{}

func InitEfacePointer() interface{} {
    var s *S
    println(s)
    return s
}

func main() {
    s := InitEfacePointer()
    fmt.Println(s)
    //println(s)
}

输出为0x0

但是当我只是使用println输出值时。

package main

type S struct{}

func InitEfacePointer() interface{} {
    var s *S
    println(s)
    return s
}

func main() {
    s := InitEfacePointer()
    println(s)
}

输出更改为0x0(0x93d40,0x0)

谁能解释这种行为的机制?谢谢!


问题答案:

首先,fmt.Println内建println是非常不同的问题:在实现和目的上都不同。fmt.Println使用反射处理许多复杂的情况,而println仅处理一些基本情况,并且仅用于“引导或调试”(如规范所述)。

在这种情况下,您将打印interface{}从返回的InitEfacePointer()。在fmt.Println外观到使用界面反映和获取基础数据:一个无指向字符串的指针,然后将其打印出来:0x0。另一方面,内建函数println采用接口,并且通过编译器的魔力(或没有魔力),它识别出它是一个接口。如本文所述,golang接口实际上是两个指针,一个指向存储类型的信息,另一个指向底层html" target="_blank">数据。因此,内置函数println会进入接口详细信息,0x93d40即“类型信息”和0x0基础数据。(第一个0x0来自函数调用)。

此外,测试返回的接口是否是nil一个常见错误。在这里阅读:https :
//golang.org/doc/faq#nil_error



 类似资料:
  • <代码>car\U gear字段在数据库中填写为“stick”(斗杆)。在图像标记后,输出更改为“自动” 为什么结果是$car\u result1-

  • 当我跑的时候。使用CPLEX的NET 4应用程序,我在不同的机器上得到不同的输出。在我的开发机器上,CPLEX输出一个结果(异常并卡在某个大值上),在所有其他机器上,结果都可以。 首先,我认为它与操作系统有关,因为我的开发机器上同时有视窗7 x64和视窗8 x64,所以我尝试在两个系统上运行应用程序。结果是一样的——有缺陷。 然后我试着在两台不同的台式机上运行,效果很好。我甚至在虚拟机内部进行了尝

  • https://leetcode.com/problems/find-all-numbers-dispapered-in-an-array/discuss/93007/simple-java-in-place-sort-solution 你能查一下上面的链接吗? 我看不懂密码 然后,第一个只是简单地使用我们可以检查是不是值。 第二个, 它最终也是一样的东西,只是为了证明索引值=index+1。 但

  • 问题内容: 我正在使用具有Spring安全性的BCryptPasswordEncoder。我的期望是,对于相同的输入,我将始终获得相同的输出。但是对于相同的输入,我得到不同的输出。您可以使用以下代码段对其进行测试: 输出:$ 2a $ 10 $ cYLM.qoXpeAzcZhJ3oXRLu9Slkb61LHyWW5qJ4QKvHEMhaxZ5qCPi 输出2:$ 2a $ 10 $ KEvYX9y

  • 我正在使用带有Spring Security的BCryptPasswordEncoder。我的期望是,对于相同的输入,我总是得到相同的输出。但是对于相同的输入,我得到不同的输出。您可以使用下面的代码片段对其进行测试: 输出:$2A$10$CYLM.QOXPEAZCZHJ3OXRLU9SLKB61LHYWW5QJ4QKVHEMHAXZ5QCPI 输出2:$2A$10$kevyx9yjj0f1x3wl

  • 我试图使用PHP的file_get_contents()获取以下URL的内容,但是输出与使用我的浏览器时不同。我尝试设置一个用户代理,但没有成功,我还尝试完全模拟浏览器执行的HTTP请求,但没有成功。有人知道什么能使它工作吗?使用PHP时,我会进入登录表单,但通过浏览器打开时,它只会打开计划: 网址如下: https://webuntis.a12.nl/WebUntis/Timetable.do?