在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 的返回值,则编译会发出尖叫 有人可以解释一下。 问题答案: 这是编译器告诉您的修改无用的方式。 这是发生了什么:当你打电话,一个 副本 的回传给你。该副本是 临时的 。您可以检查其字段,或将其分配给变量(在这种情况下,您将能够重新访问您的修改)。如果编译器允许您对该临时结构进行修改,则将无法访问
问题内容: 假设我有一个功能 现在,我想将函数分配给一个名为的变量,这样,如果我使用,它将再次调用该函数。如果我只是做作业,它就会返回。 问题答案: 您根本不调用该函数。 括号告诉蟒蛇,你调用的函数,所以当你把它们放在那里,它调用的功能,并指定值 返回 的(在这种情况下)。
如果指针类型作为函数参数,修改形参会影响实参 不能将函数内的指向局部变量的指针作为返回值,函数结束指向空间会被释放 可以将函数内的局部变量作为返回值,本质是拷贝一份