小编pol*_*527的帖子

*(* uintptr)和**(** uintptr)有什么区别

在Go的中runtime/proc.go,下面显示了一段代码:

// funcPC返回函数f的入口PC。
//假定f是一个func值。否则,行为是不确定的。
// CAREFUL:在具有插件的程序中,funcPC可以
为同一函数返回不同的值(//因为
地址空间中实际上存在同一函数的多个副本)。为了安全起见,请勿
在任何==表达式中使用//函数的结果。
// 仅将结果用作开始执行代码的地址是安全的。

//go:nosplit
func funcPC(f interface{}) uintptr {
    return **(**uintptr)(add(unsafe.Pointer(&f), sys.PtrSize))
}
Run Code Online (Sandbox Code Playgroud)

我不明白的是为什么不使用*(* uintptr)而不是**(** uintptr)?

因此,我在下面编写了一个测试程序来弄清楚。

package main

import (
    "fmt"
    "unsafe"
)


func main(){
    fmt.Println()

    p := funcPC(test)

    fmt.Println(p)

    p1 := funcPC1(test)

    fmt.Println(p1)

    p2 := funcPC(test)

    fmt.Println(p2)
}

func test(){
    fmt.Println("hello")
}

func funcPC(f func()) uintptr {
    return **(**uintptr)(unsafe.Pointer(&f))
}

func funcPC1(f func()) uintptr {
    return *(*uintptr)(unsafe.Pointer(&f))
}

Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

p不等于p1的结果使我感到困惑。当类型相同时,为什么p的值不等于p1的值?

pointers function go

8
推荐指数
1
解决办法
101
查看次数

为什么list(print(x.upper(),end ='')for'spam'中的x)得到一个[None,None,None,None]列表?

在“学习Python 5th”的第608页上 ,有一个示例代码:

>>> list(print(x.upper(), end=' ') for x in 'spam')
S P A M [None, None, None, None]
Run Code Online (Sandbox Code Playgroud)

那么,为什么[None,None,None,None]会在最后弹出?

python python-3.x

2
推荐指数
1
解决办法
85
查看次数

`go build -ldflags` 参数中的 `-X` 是什么意思?

在golang的文档中,我找不到任何关于 的参数的解释-ldflags

go build -ldflags "-X main.version=${IDE_DATE}-${IDE_VERSION}-${IDE_OS}-${IDE_ARCH}-DEBUG" -o $2 cmd/backend.go
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到有关的文档-ldflags

go

1
推荐指数
1
解决办法
2445
查看次数

标签 统计

go ×2

function ×1

pointers ×1

python ×1

python-3.x ×1