The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
justonelastdance

Go 语言没有引用类型,指针也与众不同

  •  
  •   justonelastdance · Aug 19, 2023 · 2434 views
    This topic created in 1171 days ago, the information mentioned may be changed or developed.
    兄弟们实锤了奥,go 就是值传递,可以确认的是 Go 语言中所有的传参都是值传递(传值),都是一个副本,一个拷贝。因为拷贝的内容有时候是非引用类型( int 、string 、struct 等这些),这样就在函数中就无法修改原内容数据;有的是引用类型(指针、map 、slice 、chan 等这些),这样就可以修改原内容数据。

    是否可以修改原内容数据,和传值、传引用没有必然的关系。在 C++中,传引用肯定是可以修改原内容数据的,在 Go 语言里,虽然只有传值,但是我们也可以修改原内容数据,因为参数是引用类型。

    有的小伙伴会在这里还是懵逼,因为你把引用类型和传引用当成一个概念了,这是两个概念,切记!!!
    SingeeKing
    SingeeKing
    Aug 19, 2023 via iPhone
    1
    刚好相反的是 java ,一切都是传引用
    BeautifulSoap
    BeautifulSoap
    Aug 19, 2023 via Android❤️2
    2
    。。。。。lz 这是没学过 c 语言吗
    LuckyPocketWatch
    LuckyPocketWatch
    Aug 19, 2023
    3
    void print_info(const People& p);
    这个 C++函数,传引用,你看这个函数能不能修改 p 的值。。。
    geelaw
    geelaw
    Aug 19, 2023
    4
    @LuckyPocketWatch #3 虽然楼主的理解问题比较大,不过

    struct People
    {
    mutable int mutable_field;
    int field;
    };

    void print_info(const People &p)
    {
    p.mutable_field = 1;
    const_cast<People &>(p).field = 2;
    }

    int main()
    {
    People inst;
    print_info(inst);
    }
    ke1e
    ke1e
    Aug 19, 2023 via iPhone
    5
    @geelaw 这就是 c++恶心的地方 一个 const 都能玩出花来
    oldshensheep
    oldshensheep
    Aug 19, 2023
    6
    @geelaw 又是 const 又是 mutable 再来个 const_cast ,C++太可怕了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4155 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 01:06 · PVG 09:06 · LAX 17:06 · JFK 20:06
    ♥ Do have faith in what you're doing.