奋斗在一线的 Java 开发人员小玖, 有着自己开发一个建站程序的打算, 由于某些缘由, 最终小玖把建站程序的开发语言选定为 Go。
其实之前对于Go小玖并没有太多接触, 只能算是个初学者, 所以关于Go的WEB开发从初学角度总结经验, 期望日后能对初学Go语言的小伙伴有帮助, 不过本系列不会从零基础开始介绍, 是针对有一定程序开发基础的同学, Go的一些基础语法不会详细介绍。
一、为什么选择 Go
有可能好多伙伴会存有疑问, 针对 web 开发有一整套的 Java 框架, 其开发效率高, 技术成熟, 文档以及解决方案也都成熟, 可为啥小玖会选择 Go 呢?
Go跟Java实际上差异还是相对较大的, 这实际上是全面考量的成果, 鉴于Go能够处理一些小玖觉得极为关键的问题, 然而Java却恰好难以处理亦或是没法处理的啊。
Java它占用的内存是比较高的, 框架一旦启动, 就会直接将内存占满, 这对于小玖那性能欠佳的服务器来说, 运行起来真的是极为吃力的节奏啊 ;Java的虚拟机机制存在一些不足之处, 没办法动态地去调整内存呢, 像 -Xmx等这类虚拟机参数就无法实现动态调整 ;Java编译而成的程序是需要依赖JVM环境才能运行的, 然而Go编译之后生成的二进制文件却能够直接运行 , 这种特性对于建站程序后续的交付是非常便利的 ;Java编译出来的Class很容易被反编译破解掉, 尽管存在一些诸如通过自定义方式来进行加密的方案, 可安全性能相比之下还是差了不少的。小玖知晓的最为安全的那种方案, 依旧得是借助 JNI 去调用二进制文件来进行加密以及验证, 实在是太过繁杂了。
就基于以上提及的这些问题而言, 小玖展开了寻觅, 寻觅那长时间才可有的解决方案, 诸如等等之类的均去深入了解过, 然而这些方案始终是存在着一些局限性的, 所以呢, 最终做出的选择是 Go。
Go所占用的内存是比较少的, 并且其编译而成的二进制文件, 在源码安全性方面是更具备保障的。
Go具备以上所提及的技术方面的优势, 然而同时也存在着一些劣势, 特别是在生态这个领域, 它与Java之间的差距是相当大的。
二、Java 与 Go 语言上的差异
非 Go 语言专家,只谈谈自己使用以来的一些感受。
Go 的语法比 Java 更简洁
Go的语法呈现出更为简短的特性, 并非如Java那般冗长。然而, 这仅仅属于次要方面, 在更多程度上, 是存在着一种难以确切表述出来的感觉, 当实际运用起来的时候, 便会产生这样的感受。
打个比方, 或许更能将这种情形阐释清楚, 比如在Java代码当中, try所具备的语法糖, 助力达成了数据流的关闭操作。
try (InputStream bin = getInputStream();) {
// 各种操作
} catch (IOException e) {
e.printStackTrace();
}
不用自己关闭数据流,这样用起来就很爽!
而 Go 里存在着好多这样近似的语法, 这致使人们使用起来感到无比的惬意。举例来说, Go 的函数能够直接返回多个参数, 接口只要达成了方法就能自动继承, 诸如此类……
Go 的异常处理比 Java 差
在Go的语法当中, 相较于抛出异常, 更倾向于直接返回error的实体对象。
这便致使了一个问题, 于每一处存有抛出异常可能的位点, 均需判定是不是存在 error 实体予以返回, 接着再去抉择是否施行后续的逻辑。
_, err := session.Insert(¶m.Site)
if err != nil {
return err
}
这就导致逻辑里会有很多这种异常判断。
Go同样是支持通过panic函数, 来进行异常抛出的, 然而却不太能够理解, 为何Go并不提倡去使用这个, 大概是由于异常捕获这件事情, 会显得更加麻烦的缘故。
Go 的异常捕获需要用到 defer + 一起实现才行。
defer func() {
if err := recover(); err != nil {
response.FailWithError(err.(error), c)
}
}()
Go 的并发处理比 Java 强
Go 的多线程实现比 Java 简洁,并发能力也更强。
只是小玖感受不深切, 尚未切实以自己之力运用 Go 去编写复杂的并发逻辑。
Go 与 Java 接口和实体类的不同
当中, Go语言里, 只要实现了接口里的所有方法, 便会自动实现该接口。其实体类被称作结构体, 这结构体与c语言的那种结构体是相似的。
Go具备包的观念, 不存在过多类的观念, 归属于同一个包的变量以及函数均当作一个整体, 能够在导入包之际进行导入。接着包不可以循环导入, A包导入了B包, 那么B包就不可以再度导入A包了。
三、Java 与 Go 技术框架的差异
Go 的 Web 框架多且乱
如今在 Go 当中, 处于主流状态的 Web 框架存在 Gin、Beego、Echo、Iris 等多种, 数量着实是极多的。
主流的Go的ORM框架, 有gorm框架, 还有xorm框架, 等等……
这跟Java的那种连同一套能吃遍一整圈的方式方法是全然不同的, 小玖在刚刚开始入门之际最大的疑惑在于, 这些框架存在哪些差异, 它们各自具备什么样的特性呢?
向好多从事 Go 开发的人进行了咨询, 然而好像没几个能够回答上来的, 给我的回应皆是这些框架大致都是一样的, 差别不大, 选个用着顺手的就行, 如此这般。
Go 的框架更加轻量
小玖不晓得该如何表述轻量这个词汇, 从好的方面来讲, 那便是程序更为简洁, 程序启动要更快, 占用的资源会更少。
接着代码方面直接是主要的逻辑, 并未采用建造者、观察者之类的设计模式, 代码数量更少, 在框架当中不存在各种判断等复杂的各项逻辑。

看源码比 Java 的框架轻松好多。
长时间学习的 Java 都没能完全理解透彻, 然而刚开始使用 Go 小玖就已然能够读懂 Gin 的源码, 进而在其上面进行功能定制了。
但其要是往差的方面来讲, 那便是Go的Web框架所具备的功能更少, 而少掉的那些用于判断, 以及注入逻辑所用到的部分, 要是想去实现的话, 那就得要自己动手去编写了。
比方说, 套装投入使用后, 函数之上添加一个注解, 便能够直观地达成权限校验, 然而, Go好像都是针对一个个接口自行开展判断的。
四、Java 与 Go 生态的差异
Java于国内的占有率是相当出众的, 一套备受众人知晓的框架, 历经开发时存在的纷杂多样的文档, 技术方案层面涵盖五花八门的教程, 功能达成方面融入琳琅满目的框架自动化配置, 遭遇难题之际亦有林林总总的解决教程以及大佬予以解答。
然而, 要是说到 Go 呢, 自从小玖开始开发到如今这么些天的时间里, 所获得的体验并非良好。对于简单的问题, 倒是存在一些博主分享的踩坑经验, 可对于更加深入一些的问题, 基本上就没能够寻觅到与之有用的、相关的文档以及介绍, 即便使用了, 也未曾有什么收获。
可能,更多时候看源码是唯一的出路。
难得的是, Go语言的框架大多更为简洁, 极易寻得关键代码, 其源码阅读起来相对较为轻松。
五、总结
话说回来, Java的生态相较于Go而言更为出色, 于业务系统开发这一范畴内, 众多功能在Java领域有着极为成熟的解决办法, 其具备开发速度既快又稳定之特性, 即便遭遇问题, 也能够寻觅到前人所留下的案例, 进而可以迅速将问题予以解决 、。
改成 Go 的话, 性能会更为优秀, 会更适宜去做一些偏向底层的应用程序研发, 接着就会更加便利地进行对外交付。以上,个人的理解!B29.EAsyClAsS321.CoM
20F.EAsyClAsS321.CoM
0B3.EAsyClAsS321.CoM
EBB3.EAsyClAsS321.CoM
F88A.EAsyClAsS321.CoM
E4A.EAsyClAsS321.CoM
3429.EAsyClAsS321.CoM
20C.EAsyClAsS321.CoM
657.EAsyClAsS321.CoM
2464.EAsyClAsS321.CoM
8F2.EAsyClAsS321.CoM
989D.EAsyClAsS321.CoM
C8F.EAsyClAsS321.CoM
BC5.EAsyClAsS321.CoM
FA34.EAsyClAsS321.CoM
49A7.EAsyClAsS321.CoM
52A.EAsyClAsS321.CoM
12CA.EAsyClAsS321.CoM
B5D.EAsyClAsS321.CoM
DD2.EAsyClAsS321.CoM
1FD8.EAsyClAsS321.CoM
567C.EAsyClAsS321.CoM
C470.EAsyClAsS321.CoM
0D5.EAsyClAsS321.CoM
BBC9.EAsyClAsS321.CoM
562.EAsyClAsS321.CoM
34D2.EAsyClAsS321.CoM
7AC.EAsyClAsS321.CoM
C018.EAsyClAsS321.CoM
5ECF.EAsyClAsS321.CoM
582.EAsyClAsS321.CoM
EEC1.EAsyClAsS321.CoM
977.EAsyClAsS321.CoM
2E6E.EAsyClAsS321.CoM
7D28.EAsyClAsS321.CoM
83E4.EAsyClAsS321.CoM
4E25.EAsyClAsS321.CoM
F1B.EAsyClAsS321.CoM
FFD.EAsyClAsS321.CoM
213A.EAsyClAsS321.CoM
08E.EAsyClAsS321.CoM
BAF.EAsyClAsS321.CoM
A03E.EAsyClAsS321.CoM
960E.EAsyClAsS321.CoM
588D.EAsyClAsS321.CoM
FD9.EAsyClAsS321.CoM
9EB.EAsyClAsS321.CoM
A9C7.EAsyClAsS321.CoM
8340.EAsyClAsS321.CoM
501.EAsyClAsS321.CoM
91B.EAsyClAsS321.CoM
E41.EAsyClAsS321.CoM
47FD.EAsyClAsS321.CoM
FD46.EAsyClAsS321.CoM
39C5.EAsyClAsS321.CoM
1607.EAsyClAsS321.CoM
4B69.EAsyClAsS321.CoM
CFE.EAsyClAsS321.CoM
50D.EAsyClAsS321.CoM
39B6.EAsyClAsS321.CoM
69D.EAsyClAsS321.CoM
DE3.EAsyClAsS321.CoM
0D7.EAsyClAsS321.CoM
D5EF.EAsyClAsS321.CoM
9D9D.EAsyClAsS321.CoM
1FFA.EAsyClAsS321.CoM
635.EAsyClAsS321.CoM
2769.EAsyClAsS321.CoM
F37.EAsyClAsS321.CoM
F6D.EAsyClAsS321.CoM
4688.EAsyClAsS321.CoM
FDA.EAsyClAsS321.CoM
3099.EAsyClAsS321.CoM
43E.EAsyClAsS321.CoM
E6D.EAsyClAsS321.CoM
9B5.EAsyClAsS321.CoM
05CE.EAsyClAsS321.CoM
C408.EAsyClAsS321.CoM
274C.EAsyClAsS321.CoM
D7F.EAsyClAsS321.CoM
7A9.EAsyClAsS321.CoM
1ED.EAsyClAsS321.CoM
6AE9.EAsyClAsS321.CoM
545.EAsyClAsS321.CoM
896.EAsyClAsS321.CoM
5F5.EAsyClAsS321.CoM
0314.EAsyClAsS321.CoM
DF7C.EAsyClAsS321.CoM
6B1.EAsyClAsS321.CoM
D4B.EAsyClAsS321.CoM
77A4.EAsyClAsS321.CoM
353E.EAsyClAsS321.CoM
9096.EAsyClAsS321.CoM
90D.EAsyClAsS321.CoM
62D7.EAsyClAsS321.CoM
9B4.EAsyClAsS321.CoM
897B.EAsyClAsS321.CoM
5734.EAsyClAsS321.CoM
BFE.EAsyClAsS321.CoM
E107.EAsyClAsS321.CoM
A22D.EAsyClAsS321.CoM
2FDB.EAsyClAsS321.CoM
F5D.EAsyClAsS321.CoM
FCA6.EAsyClAsS321.CoM
8042.EAsyClAsS321.CoM
692C.EAsyClAsS321.CoM
8E2B.EAsyClAsS321.CoM
C03F.EAsyClAsS321.CoM
AC6.EAsyClAsS321.CoM
CE24.EAsyClAsS321.CoM
86ED.EAsyClAsS321.CoM
6599.EAsyClAsS321.CoM
BFD.EAsyClAsS321.CoM
9BF5.EAsyClAsS321.CoM
6C1.EAsyClAsS321.CoM
1298.EAsyClAsS321.CoM
B67C.EAsyClAsS321.CoM
5907.EAsyClAsS321.CoM
3D6.EAsyClAsS321.CoM
301.EAsyClAsS321.CoM
E3EF.EAsyClAsS321.CoM
060E.EAsyClAsS321.CoM
787.EAsyClAsS321.CoM
594E.EAsyClAsS321.CoM
853F.EAsyClAsS321.CoM
FD05.EAsyClAsS321.CoM
BBAC.EAsyClAsS321.CoM
7DD.EAsyClAsS321.CoM
F025.EAsyClAsS321.CoM
7CD2.EAsyClAsS321.CoM
B1D8.EAsyClAsS321.CoM
E544.EAsyClAsS321.CoM
ABA.EAsyClAsS321.CoM
A767.EAsyClAsS321.CoM
9CAA.EAsyClAsS321.CoM
E43.EAsyClAsS321.CoM
4B3C.EAsyClAsS321.CoM
A26.EAsyClAsS321.CoM
2BFD.EAsyClAsS321.CoM
E78.EAsyClAsS321.CoM
F9C.EAsyClAsS321.CoM
5207.EAsyClAsS321.CoM
1F92.EAsyClAsS321.CoM
0AE3.EAsyClAsS321.CoM
1DE.EAsyClAsS321.CoM
5B2.EAsyClAsS321.CoM
1D3.EAsyClAsS321.CoM
2BFF.EAsyClAsS321.CoM
7415.EAsyClAsS321.CoM
A426.EAsyClAsS321.CoM
94D.EAsyClAsS321.CoM
4E6.EAsyClAsS321.CoM
1EA5.EAsyClAsS321.CoM
F09.EAsyClAsS321.CoM
0B71.EAsyClAsS321.CoM
C89.EAsyClAsS321.CoM
ADE.EAsyClAsS321.CoM
801F.EAsyClAsS321.CoM
9054.EAsyClAsS321.CoM
7997.EAsyClAsS321.CoM
80E2.EAsyClAsS321.CoM
EB66.EAsyClAsS321.CoM
C19.EAsyClAsS321.CoM
994.EAsyClAsS321.CoM
A17F.EAsyClAsS321.CoM
F396.EAsyClAsS321.CoM
9E7.EAsyClAsS321.CoM
CA7A.EAsyClAsS321.CoM
316.EAsyClAsS321.CoM
C2AE.EAsyClAsS321.CoM
142.EAsyClAsS321.CoM
7D6.EAsyClAsS321.CoM
4EB.EAsyClAsS321.CoM
108.EAsyClAsS321.CoM
2358.EAsyClAsS321.CoM
E55A.EAsyClAsS321.CoM
1F7.EAsyClAsS321.CoM
A58.EAsyClAsS321.CoM
D62.EAsyClAsS321.CoM
9103.EAsyClAsS321.CoM
653.EAsyClAsS321.CoM
88C0.EAsyClAsS321.CoM
AA3.EAsyClAsS321.CoM
11E1.EAsyClAsS321.CoM
D67C.EAsyClAsS321.CoM
32AD.EAsyClAsS321.CoM
D925.EAsyClAsS321.CoM
7C23.EAsyClAsS321.CoM
88C.EAsyClAsS321.CoM
EE66.EAsyClAsS321.CoM
F8E.EAsyClAsS321.CoM
8006.EAsyClAsS321.CoM
BA42.EAsyClAsS321.CoM
5FE5.EAsyClAsS321.CoM
7D6B.EAsyClAsS321.CoM
9246.EAsyClAsS321.CoM
772A.EAsyClAsS321.CoM
DCE6.EAsyClAsS321.CoM
705B.EAsyClAsS321.CoM
5061.EAsyClAsS321.CoM
4771.EAsyClAsS321.CoM
BB9.EAsyClAsS321.CoM
8BC9.EAsyClAsS321.CoM
683.EAsyClAsS321.CoM
4260.EAsyClAsS321.CoM
FDB.EAsyClAsS321.CoM
F1AD.EAsyClAsS321.CoM
394C.EAsyClAsS321.CoM
7CB.EAsyClAsS321.CoM
86B9.EAsyClAsS321.CoM
A17.EAsyClAsS321.CoM
9FF.EAsyClAsS321.CoM
9E81.EAsyClAsS321.CoM
E6AC.EAsyClAsS321.CoM
5B4D.EAsyClAsS321.CoM
BAE0.EAsyClAsS321.CoM
349.EAsyClAsS321.CoM
D9D.EAsyClAsS321.CoM
0EC.EAsyClAsS321.CoM
53D0.EAsyClAsS321.CoM
15DE.EAsyClAsS321.CoM
4457.EAsyClAsS321.CoM
DB28.EAsyClAsS321.CoM
D187.EAsyClAsS321.CoM
4277.EAsyClAsS321.CoM
3868.EAsyClAsS321.CoM
44B.EAsyClAsS321.CoM
9EA2.EAsyClAsS321.CoM
877.EAsyClAsS321.CoM
44D.EAsyClAsS321.CoM
55EF.EAsyClAsS321.CoM
1C1.EAsyClAsS321.CoM
67D.EAsyClAsS321.CoM
D4CD.EAsyClAsS321.CoM
E980.EAsyClAsS321.CoM
5001.EAsyClAsS321.CoM
CE9.EAsyClAsS321.CoM
1F1D.EAsyClAsS321.CoM
6292.EAsyClAsS321.CoM
9B27.EAsyClAsS321.CoM
BB8.EAsyClAsS321.CoM
EE5.EAsyClAsS321.CoM
DC25.EAsyClAsS321.CoM
80C8.EAsyClAsS321.CoM
784.EAsyClAsS321.CoM
7A17.EAsyClAsS321.CoM
705.EAsyClAsS321.CoM
0F54.EAsyClAsS321.CoM
D085.EAsyClAsS321.CoM
A2BA.EAsyClAsS321.CoM
5632.EAsyClAsS321.CoM
E4D2.EAsyClAsS321.CoM
A34.EAsyClAsS321.CoM
3A2.EAsyClAsS321.CoM
B455.EAsyClAsS321.CoM
47B.EAsyClAsS321.CoM
A1CE.EAsyClAsS321.CoM
72CD.EAsyClAsS321.CoM
F20E.EAsyClAsS321.CoM
B061.EAsyClAsS321.CoM
A27C.EAsyClAsS321.CoM
37A1.EAsyClAsS321.CoM
6FC7.EAsyClAsS321.CoM
57DE.EAsyClAsS321.CoM
71BB.EAsyClAsS321.CoM
068A.EAsyClAsS321.CoM
7DA.EAsyClAsS321.CoM
6E64.EAsyClAsS321.CoM
C6D7.EAsyClAsS321.CoM
A5FD.EAsyClAsS321.CoM
F17.EAsyClAsS321.CoM
669.EAsyClAsS321.CoM
F8BC.EAsyClAsS321.CoM
2F4.EAsyClAsS321.CoM
CA7.EAsyClAsS321.CoM
512.EAsyClAsS321.CoM
A207.EAsyClAsS321.CoM
D4D.EAsyClAsS321.CoM
B64.EAsyClAsS321.CoM
0DC9.EAsyClAsS321.CoM
D592.EAsyClAsS321.CoM
2447.EAsyClAsS321.CoM
E18.EAsyClAsS321.CoM
2F78.EAsyClAsS321.CoM
A07.EAsyClAsS321.CoM
7D4.EAsyClAsS321.CoM
E75C.EAsyClAsS321.CoM
758.EAsyClAsS321.CoM
A780.EAsyClAsS321.CoM
31F.EAsyClAsS321.CoM
6058.EAsyClAsS321.CoM
CBC.EAsyClAsS321.CoM
6B97.EAsyClAsS321.CoM
CD74.EAsyClAsS321.CoM





