将函数返回的值赋给指针

时间:2017-02-27 02:15:53

标签: pointers go

在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()

真的需要本地变量吗?并且不会产生不必要的副本吗?

1 个答案:

答案 0 :(得分:6)

需要本地变量per the specification

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

惯用Go程序使用time.Time值。使用*time.Time很少见。