gpt4 book ai didi

pointers - 为什么 http.Request 参数必须是一个指针?

转载 作者:IT王子 更新时间:2023-10-29 01:16:42 24 4
gpt4 key购买 nike

package main

import (
"net/http"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
w.Write([]byte("hello world"))
})
http.ListenAndServe(":8000", nil)
}

如果我删除 http.Request 中的 *:

github.com/creating_web_app_go/main.go:8: cannot use func literal (type func(http.ResponseWriter, http.Request)) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc

我对 Go 和指针都很陌生。

所以问题是,为什么 http.Request 必须是指针而不是 func literal?谁能以最简单的方式解释这一点,也许可以引用源代码?

最佳答案

因为它是一个大结构。复制它会很昂贵。所以它是一个指向结构的指针,当结构很大时,这在 Go 中很常见。它也有一些状态,所以如果它被复制可能会造成混淆。成为 func 文字是没有意义的;我不明白为什么这是一个选项。

关于pointers - 为什么 http.Request 参数必须是一个指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31145564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com