跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 求大佬解答一下 Go 相关的问题
未分類
18 1 月 2021

求大佬解答一下 Go 相关的问题

求大佬解答一下 Go 相关的问题

資深大佬 : xbh1794970183564 4

LZ 是 Java 转 go,目前对 go 的指针不是很理解,很多时候不明白为什么要用指针,比如下面的语句

var feeds []*Feed err = json.NewDecoder(file).Decode(&feeds) return feeds, err

这里没看明白为什么要用*Feed, 直接 Feed 为什么不行呢?

大佬有話說 (11)

  • 主 資深大佬 : xbh1794970183564

    排版歪了。。。大佬谅解

  • 資深大佬 : cmostuor

    var feeds []
    *Feed, err = json.NewDecoder(file).Decode(&feeds)
    return feeds, err

    至于为啥要加* 有 c 或 c++语言经验的就知道这是指针运算符, go 语言是 c 语言开发的大佬领导团队开发的, 为的是解决并发问题

  • 資深大佬 : darksword21

    @cmostuor 建议重新审题

  • 資深大佬 : darksword21

    我觉得直接用 Feed 也可以,除非你有需要判断 != nil 的需求,当然具体的我了解也不深,刚毕业的喳喳,
    最近正准备了解下总结一篇博客

  • 資深大佬 : darksword21

    性能上来说

    https://stackoverflow.com/questions/27622083/slices-of-structs-vs-slices-of-pointers-to-structs

  • 主 資深大佬 : xbh1794970183564

    @darksword21 主要刚开始学,看了几个代码,感觉很多地方都用了指针,但是又说不上来为什么要用,就很难受

  • 資深大佬 : carlclone

    我的理解是 go 里没有引用传值,都是拷贝的,拷贝指针比拷贝结构体的开销小?不知道对不对。。

  • 主 資深大佬 : xbh1794970183564

    @carlclone 好像有道理

  • 資深大佬 : seth19960929

    其实道理很简单呀. 任何语言都是这样.
    你把一个变量传进函数, 那么都是值传递, 无法从函数内部直接改变函数外的这个变量
    ****
    当你传递一个引用或者指针, 那 Decode 函数就可以在内部对你这个变量进行赋值操作.

    你试试传递:(注意 星星的位置)
    var feeds *[]Feed = new([]Feed)
    那你就不用传递引用了

  • 資深大佬 : lysS

    func (dec *Decoder) Decode(v interface{}) error
    没搞错吧?只用一个返回值 err 啊

  • 資深大佬 : BeautifulSoap

    先不论这个代码。。。。

    用指针主要是一般认为,传指针比传值的性能损耗小,而且传值还涉及到指拷贝的问题

    但是在 go 里面这个问题也不是绝对的,因为你传指针的话还会遇到逃逸问题,有时候传指针性能还不如直接值拷贝好

    所以对于 go 经验性来说,对于小的 struct 选择值拷贝性能较好,对于大的 struct 传指针性能会好

    但是对于什么事小 struct,什么事大 struct,就没什么统一标准了。。。。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具