我最近决定在一个新项目中使用 GoLang 来实现一组增删改查的 API。在此之前,我较为熟悉 Java,Groovy,了解一些 Python。
成都创新互联公司服务项目包括银州网站建设、银州网站制作、银州网页制作以及银州网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,银州网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到银州省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
我大部分的经验都是使用 Java 或者 Groovy 加上 Spring Boot。这让我感到有些无聊,所以为什么不来学点儿东西找找乐子呢?
要求
以下是一些要求。
非功能性要求
加分项
使用的模块和库
作用模块访问数据库mongo-go-drive路由go-chiREST API JSON Patch( 译者注:RFC6902[1] 和 RFC7396[2])json-patch单元测试testifySwagger API 定义go-swagger
优点
Go 语言与 C 和 Java 十分的相像。有 C 和 Java 的基础能很容易的熟练掌握 Go 语言,完成一个入门项目。
我特别喜欢 Go 代码的简单明了。
公平来说,我也喜欢样板代码尽可能少的,备受好评的框架。我就十分喜欢 Java 11+ 或者 Groovy 与 Spring Boot,Spring Data,Lombok 项目,可能还有 Spring Data REST 的联合使用。当然,有时候 Spring Boot Data REST 的魔法有点儿过犹不及了。
Go 的 'defer' 关键字可以说是我最喜欢的特性之一了。推迟一些操作直到函数退出才执行这一特性,在关闭资源并记录函数退出动作的日志方面十分有用。
不同点与不合适点
错误处理有点儿繁琐。
错误处理对于 Java 背景的人来说有些不同。我发现在 Go 中它需要更明确。
在 Java 中,一个方法能抛出一个异常,也可以捕获一个或多个异常,忽略它们(这样做可能是错误的),或者重新抛出给调用者来处理。Go 需要使用先调用方法,然后判断是否有错误发生这种模式。我们可以讨论下这样做好不好。
我发现对于 Go 的错误检测和传递需要一段时间来适应而且觉得有点繁琐,但这样肯定是能行的。
- // 我经常在代码中看到这样的模式
- obj1, err := doohickey.doSomething(someArg)
- if err !=nil {
- log.Println("doohickey.doSomething got error error: ", err)
- return
- }
- obj2, err2 := widget.doSomethingElse(otherArg)
- if err2 !=nil {
- log.Println("Widget doSomethingElse returned error: ", err2)
- return
- }
- //...
JSON 响应类型以及映射到结构体
对于 Go,JSON 和 静态类型,我发现 Go 在如何处理动态 JSON 和将其解析为结构体方面有些笨拙和令人困惑。
这在 Groovy 和 Python 中相当容易,他们完全可以动态的把 JSON 转换成其他东西的映射。
在 Go 中,将 JSON 反序列化为一个结构并将其序列化回来,这与其他语言中的做法并没有本质上的不同。
成熟度进展
实际上,我在这方面并没有发现它有什么不好的。正相反,我发现了一些期待的地方。因为 Go 仍然是一门相对比较新的语言,在一些领域它正在迎头赶上。
Go 依赖和版本化模块库
因为以前使用过依赖管理和构建工具,如 Java 的 Gradle 和 Maven,自然而然的我就想 Go 有同种水平的依赖管理。
在我写本文时,GoLang 1.13[3] 支持谷歌的模块代理,文档上是这样说的:
结束语
令人惊讶的是,很容易地就可以掌握 GoLang 到实际生产的程度。我觉得它令人愉快而且很有趣。增强 REST API,精炼数据模型,生成 Swagger 文档和创建单元测试都是很流行并舒服的体验。
基于这次的经历,我越发的想学习 GoLang 了。
本文标题:项目中要不要使用Go?我是这么思考的
地址分享:http://www.csdahua.cn/qtweb/news14/248414.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网