Java 开发者 1 天看懂 Go 核心语法(对照表 + 可运行代码) 本文为《Java工程师转Go实战》连载第 3 篇 / 共 20 篇上一篇从 Maven 到 go mod下一篇Java 只有引用Go 的指针到底是什么类比开场学 Go 最快的方式不是背手册而是 constantly 问自己「这句 Java 代码Go 里怎么写」下面这张对照表 可运行代码够你一天建立肌肉记忆。一、基础语法对照速查特性JavaGo入口public static void mainfunc main()变量int x 1;x : 1或var x int 1常量finalconst类class User {}type User struct {}方法void save()func (u *User) Save()可见性public/private首字母大小写继承extends组合 embedding接口interfaceinterface隐式实现空值nullnil集合ListTslice、map循环for/while只有for可模拟 while异常try/catch多返回值error泛型一直有Go 1.18[]T、map[K]V包管理import com.xxximport github.com/xxx二、变量与类型JavafinalStringname张三;intage28;varlistList.of(1,2,3);Goname:张三// 短变量声明最常用varageint28list:[]int{1,2,3}constMaxRetry3注意:只能在函数内使用包级变量用var。三、控制流ifGo 的 if 可以带初始化语句iferr:doSomething();err!nil{returnerr}// err 作用域仅在 if 块内——Java 没有等价写法但很实用forGo 没有 while用 for 代替// 经典三段式fori:0;i10;i{fmt.Println(i)}// 等价 whilen:0forn10{n}// 无限循环for{break}switch默认不 fallthroughswitchday{caseMon,Tue:fmt.Println(工作日)caseSat,Sun:fmt.Println(周末)default:fmt.Println(其他)}// 无需 break除非显式 fallthrough四、函数多返回值是常态JavapublicOptionalUserfindById(Longid){// ...}GofuncFindByID(idint64)(*User,error){ifid0{returnnil,errors.New(invalid id)}returnUser{ID:id},nil}user,err:FindByID(1)iferr!nil{// handle}习惯养成Go 里几乎每个可能失败的操作都返回error不是异常。五、集合slice 与 mapslice动态数组类似 ArrayListnums:[]int{1,2,3}numsappend(nums,4)// 追加sub:nums[1:3]// 切片 [2,3]共享底层数组fmt.Println(len(nums),cap(nums))mapm:map[string]int{alice:100,bob:90,}m[carol]85score,ok:m[alice]// ok 表示 key 是否存在if!ok{// not found}六、结构体与方法typeUserstruct{IDint64Namestring}// 值接收者func(u User)Greet()string{returnHello, u.Name}// 指针接收者要修改字段时用func(u*User)Rename(namestring){u.Namename}接收者类比 Java何时用值(u User)操作副本只读、小结构体指针(u *User)操作 this修改状态、大结构体七、完整可运行示例packagemainimport(fmtstrings)typeUserstruct{IDint64Namestring}func(u*User)NormalizeName(){u.Namestrings.TrimSpace(u.Name)}funcFilterAdults(users[]User,minAgeint)[]User{// 简化示例真实场景用 struct 带 Age 字段returnusers}funcmain(){u:User{ID:1,Name: 李四 }u.NormalizeName()fmt.Printf(%v\n,u)scores:map[string]int{go:95,java:90}fork,v:rangescores{fmt.Println(k,v)}}八、Java 人第一天易错点unused import 编译报错— Go 不允许未使用的 import分号— 编译器自动插入一般不手写大小写导出—User可导出user不可slice 截取共享底层数组— 改 sub 可能影响原 slicemap 并发读写— 会 panic需sync.Map或加锁 面试追问:和var区别:是声明赋值类型推断var可包级声明可只声明不赋值零值。Go 有哪些零值数字 0、bool false、string “”、指针/slice/map/channel/interface 为 nil。slice 和 array 区别[3]int是定长数组值类型[]int是切片引用底层数组可动态 append。 一句话总结把 class 换成 struct、把异常换成 error、把 ArrayList 换成 slice——Go 的骨架一天就能搭起来难的是后面并发和工程习惯。

相关新闻

最新新闻

小数据革命:小企业低成本高效数据实践指南

小数据革命:小企业低成本高效数据实践指南

1. 小数据革命:小企业真正用得上、养得起、见效快的数据实践“小数据革命”这个词,最近两年在咨询公司PPT里出现频率很高,但翻来覆去讲的都是“如何用AI分析千万级用户行为”,或者“搭建湖仓一体架构打通全链路”。我听了三场闭门…

2026/7/19 1:11:18
Autel MaxiIM IM608汽车诊断设备全面评测与使用指南

Autel MaxiIM IM608汽车诊断设备全面评测与使用指南

1. Autel MaxiIM IM608 设备概览Autel MaxiIM IM608 是一款面向专业汽车维修技师和诊断工程师设计的综合诊断工具。作为 Autel 旗下 MaxiIM 系列的中高端产品,IM608 在硬件配置和软件功能上都体现了专业级的水准。从硬件角度看,IM608 采用 8 英寸 IPS 触…

2026/7/19 1:11:18
74HC595级联驱动16x16 LED点阵屏方案详解

74HC595级联驱动16x16 LED点阵屏方案详解

1. 项目背景与硬件架构解析16x16 LED点阵屏作为嵌入式系统中常见的人机交互组件,其驱动方式直接影响显示效果和开发难度。本方案采用4片74HC595移位寄存器级联控制,相比传统的行列直接驱动方式,具有以下显著优势:引脚资源节约&…

2026/7/19 1:11:18
如何高效解密中兴光猫配置:实战完整网络配置工具指南

如何高效解密中兴光猫配置:实战完整网络配置工具指南

如何高效解密中兴光猫配置:实战完整网络配置工具指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 面对中兴光猫配置文件的加密难题,网络管理员和…

2026/7/19 1:11:18
Android回调事件处理机制详解与实战

Android回调事件处理机制详解与实战

1. 初识Android中的回调事件处理机制作为一名Android开发者,我至今还记得第一次接触回调机制时的困惑。那是在开发一个自定义按钮组件时,我需要处理用户的触摸事件。当时我尝试了各种监听器设置,直到一位资深同事建议我:"为什…

2026/7/19 1:11:18
网络热词@Yes! Scott!#的传播机制与文化解读

网络热词@Yes! Scott!#的传播机制与文化解读

1. 项目背景与现象解析"Yes! Scott!#"这个看似简单的短语,实际上代表了当代网络文化中一种独特的表达方式。这种由符号、英文单词和感叹号组成的短句,在社交媒体平台和即时通讯软件中迅速流行开来。它既不是传统意义上的标签(Hasht…

2026/7/19 1:06:18

月新闻