为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中返回一个值而不是一个指针

在 Go 中返回一个值而不是一个指针

Go
森栏 2022-01-04 15:43:52
在 Go 的“net/http”包中,有一个名为ResponseWriter. 这个接口有一个方法叫做Header() Header. 由于Header该值Header()返回的是一个值,而不是一个指针,我假定该函数将不会返回的实际Header值是私有的,ResponseWriter而是一个副本。然而,情况似乎并非如此。ResponseWritershow的文档r.Header().Add("key", "value")是向 http 响应添加标头的正确方法。我深入挖掘并找到了Header类型的定义。它是type Header map[string][]string。我在这里有点困惑。在这种情况下,您是否不必返回指针来修改具有的值ResponseWriter?如果是为什么?
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

那是因为映射和切片是引用类型。看看这段代码:


package main


import (

    "fmt"

)


func main() {

    m1 := make(map[string]string)

    var m2 map[string]string

    m1["one"] = "this is from m1"

    m2 = m1

    m2["two"] = "this is from m2"

    fmt.Printf("%#v\n", m1)

}

输出是:


map[string]string{"one":"this is from m1", "two":"this is from m2"}


这具有相同的结果:


package main


import (

    "fmt"

)


type mymap map[string]string


func main() {

    m1 := make(mymap)

    var m2 mymap

    m1["one"] = "this is from m1"

    m2 = m1

    m2["two"] = "this is from m2"

    fmt.Printf("%#v\n", m1)

}

输出:


main.mymap{"one":"this is from m1", "two":"this is from m2"}


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信