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

将函数返回的值分配给指针

柳均
2023-03-14
问题内容

在Go中,如何将函数调用返回的值分配给指针?

考虑下面的示例,注意time.Now()返回一个time.Time值(不是指针):

package main

import (
    "fmt"
    "time"
)

type foo struct {
    t *time.Time
}

func main() {
    var f foo

    f.t = time.Now()  // Fail line 15

    f.t = &time.Now() // Fail line 17

    tmp := time.Now() // Workaround
    f.t = &tmp

    fmt.Println(f.t)
}

这些都失败了:

$ go build
# _/home/jreinhart/tmp/go_ptr_assign
./test.go:15: cannot use time.Now() (type time.Time) as type *time.Time in assignment
./test.go:17: cannot take the address of time.Now()

是否确实需要局部变量?那不会招致不必要的复制吗?


问题答案:

根据规范,必须使用局部变量。

要获取值的地址,调用函数必须将返回值复制到可寻址的内存中。有副本,但这不是多余的。

Go程序通常使用time.Time值。

*time.Time有时在应用程序想要区分无值和其他时间值的情况下使用A。在SQL
NULL和有效时间之间进行区分是一个示例。因为a的零值已经time.Time过去,所以使用零值代表不值通常是很实际的。使用该IsZero()方法测试零值。



 类似资料:
  • 问题内容: 我有一个Python函数fooPy(),它返回一些值。(int / double或string) 我想使用此值并在shell脚本中分配它。例如,以下是python函数: 在shell脚本中,我尝试了以下操作,但是它们都不起作用。 问题答案: 您可以在Python中打印您的值,如下所示: 并在您的shell脚本中: 确保不要在shell脚本中的空格周围。

  • 这可能是SO、dostips和ss64中几个问题的重复。我所做的研究告诉我要注意函数中的作用域。但我的解决方案简单明了,但问题依然存在 和背后的真正含义 如何在批处理脚本中工作,例如

  • 我在玩C语言中的函数指针只是为了学习。我尝试调用一个空函数,并将其结果设置为int。 我从中得到的结果是: 在对它进行了一点研究之后,我意识到main正在函数()中打印printf语句中的字符数。为什么会这样?这是预期产出吗?

  • 问题内容: 考虑以下示例。 如果我尝试更改类实例的变量,则编译成功。 但是,如果我尝试更改method 的返回值,则编译会发出尖叫 有人可以解释一下。 问题答案: 这是编译器告诉您的修改无用的方式。 这是发生了什么:当你打电话,一个 副本 的回传给你。该副本是 临时的 。您可以检查其字段,或将其分配给变量(在这种情况下,您将能够重新访问您的修改)。如果编译器允许您对该临时结构进行修改,则将无法访问

  • 问题内容: 假设我有一个功能 现在,我想将函数分配给一个名为的变量,这样,如果我使用,它将再次调用该函数。如果我只是做作业,它就会返回。 问题答案: 您根本不调用该函数。 括号告诉蟒蛇,你调用的函数,所以当你把它们放在那里,它调用的功能,并指定值 返回 的(在这种情况下)。

  • 在rust中,任何函数都有返回类型,当函数返回时,会返回一个该类型的值。我们先来看看main函数: fn main() { //statements } 之前有说过,函数的返回值类型是在参数列表后,加上箭头和类型来指定的。不过,一般我们看到的main函数的定义并没有这么做。这是因为main函数的返回值是(),在rust中,当一个函数返回()时,可以省略。main函数的完整形式如下: