你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

intellij idea golang plugin 从Java引用看Go指针,一文搞懂Go指针与Java引用的本质差异

发布时间:2026-01-03

浏览次数:0

为数众的Java开发者于学习Go之际,头一回瞅见*和&之时,皆会出于本能地产生紧张之感:

“Go 也要像 C 一样玩指针了吗?”

答案是:是指针,但和你想象的不一样。

循着 Java 开发者最为熟知的“引用”起始intellij idea golang plugin,助你彻彻底底弄明白 Go 指针与 Java 引用之间的本质区别,。

一、Java 引用:你“用过”,但从没真正见过

在 Java 中:

User u = new User("Tom");

u = null; // 只能断开引用

Java 的原则:

开发者永远不直接接触内存地址

二、Go 指针:可见、可控、但很克制

在 Go 中:

type User struct {
    Name string
}
u := User{Name: "Tom"}
p := &u

fmt.Println(p)   // 内存地址
fmt.Println(*p)  // 实际值

Go 的态度:

允许你接触指针,但只在“安全范围内”

三、核心差异全部呈现(首先查看结论),四、参数进行传递:Java之中最容易产生误解的要点,Java:始终都是值传递 。

void change(User u) {
    u = new User("Jack");
}

不会影响外部对象

但:

void changeName(User u) {
    u.name = "Jack";
}

会影响对象内部状态

因为 拷贝的是“引用的值”

Go:值 or 指针,一眼就能看出来

func change(u User) {
    u.Name = "Jack"
}

不会影响原值

func change(u *User) {
    u.Name = "Jack"
}

会影响原值

Go 的好处:

是否修改原值,写在函数签名里

五、结构体方法intellij idea golang plugin,Java类方法与Go接收者,Java 。

class User {
    String name;
    void setName(String n) {
        this.name = n;
    }
}

Go(值接收者)

构造一个具有名为SetName方法的结构体实例,该结构体类型为User,方法接收一个string类型的参数n ,用于设置名称 ,。
    u.Name = n
}

不会修改原对象

Go(指针接收者)

定义一个函数,这个函数属于名为User的结构体指针类型,函数名称是SetName,它有一个参数是字符串类型的n,然后它用于设置。
    u.Name = n
}

会修改原对象

这是 Go 项目中最常见的写法

六、对于 Java 开发者而言,最关心的那个问题是,Go 这种语言会不会呈现出像 C 语言那样容易出现内存泄漏的状况呢?

不会

Go 指针 ≠ C 指针

那为什么 Go 还要指针?

三个核心原因:

1️⃣ 避免大对象拷贝(性能)

2️⃣ 明确表达“我要修改你”

3️⃣ 实现接口和方法共享状态

七、在何种时候应当运用 Go 指针呢?那些被推荐使用指针的场景是什么,而哪些又是不被推荐的呢?八、用一句话来进行总结(送你一句能够成为爆款的话语)。

Java 用“看不见的引用”保护你,

Go 用“受限的指针”相信你。

如有侵权请联系删除!

13262879759

微信二维码