百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

服务器后端语言选择(Go篇)

toyiye 2024-06-21 11:59 8 浏览 0 评论


背景图片 来自 Markus Spiske on Unsplash

ProjectX只是现在我在做的一个项目的名称,我计划在整个项目的过程中做更多的尝试,并且尽可能的将过程记录下来。如果感兴趣可以关注我,非常欢迎给我或是ProjectX提提你的建议。

这次ProjectX在选择后端开发语言的时候,我不会考虑我自己的熟悉程度和之前的积累,希望可以比较客观的选择一个适合的后端语言,我也可以通过这个过程了解更多后端语言。目前计划尝试的后端语言有:PHP、JAVA、Node.js、Go、Rust、Ruby、Python。没有案例的分享都是耍流氓,我用这几个语言统一做一个简单的数据查询返回的API接口,来从服务器支持、开发环境搭建、RESTful路径设置、数据库连接、语言结构和文档社区丰富度六个方面来聊聊我自己的感受。

语言简介

Go属于相对比较年轻的一个编程语言,最初在2007年有Google的Robert Griesemer, Rob Pike, Ken Thompson设计,并在2009年11月推出,虽然只有短短的10年多一点的历史,但是最近几年不同的编程语言排行榜,Go都能排进前十。作为Google很多新项目的主编程语言,Go最初设计的时候就是以解决多线程编程和高并发为主要卖点的。作为2007开始设计的编程语言,对于多核系统的支持更原生,和其他在发展过程中才开始支持多线程的语言要更有优势。根据网上的资料和我看了文档的初步理解,Go语言在结构上非常类似C语言,而且语法结构非常简洁,关键词并不多。Go应该属于一个功能比较强大的编程语言。

GoLang Logo

服务器支持

Go的运行环境可以在Windows、macOS和Linux下直接安装,也可以通过编译源码来安装。所以基本上主流的服务器操作系统都能支持运行Go开发的应用程序。只要在对应服务器操作系统下安装好Go的运行环境,就能直接运行通过Go开发的应用程序。对于处理HTTP请求,最简单的可以通过Go的net/http包中的功能通过三行代码就能做到了。当然如果对于HTTP服务器需要更多的功能也可以做的更复杂,或是调用Go现有的HTTP第三方库。只需要对于完成的代码编译,并执行就可以了。对于服务器的支持还是非常好的,而且可以根据项目的特性来定制服务器性能。

IDE VS EDITOR

作为一个高级编程语言,使用IDE也是一个不错的选择,直接完成脚手架的搭建,而且编程环境也不需要花太多时间搭建,可算是直接开箱即用,我尝试了JetBrain的GoLand。下载安装后就可以直接新建项目,不需要安装类似代码格式化或是自动代码补充的工具。对于希望直接上手开发的朋友还是非常值得的,虽然有些小贵,但是节省了很多时间。


而且使用GoLand的时候可以根据输入的代码添加Imports这个功能还是不错的,可以有效的提高代码效率。

视频加载中...

不过我比较喜欢折腾一下,当然Editor的开发模式还能将一些被IDE自动化处理的问题暴露出来,通过解决这些问题也算是一种不错的学习语言机制的方式。在VSCode安装好了Go扩展插件之后,需要安装相应的辅助工具,不过因为一些众所周知的网络原因,基本是不可能安装成功。然后经过一段时间的研究,尝试了不同的方式,例如clone github 上golang tools再安装,或者直接下载各个工具的源码在编译。不过最后是在Go环境内添加了一个代理网站(如下),然后重启VS Code再安装就成功了。这个方式比较方便,所以分享一下。

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

最终根据我自己的习惯,还是会使用Editor来做开发,不过对于像Go这样的高端语言选择IDE还是更高效的解决方案

RESTFUL VS GRAPHQL

Go的服务器路径是通过net/http这个包支持的,虽然可以直接使用net/http来实现RESTful的路径规范,但是对于比较复杂的RESTful接口的话,主程序会比较复杂而且维护性会比较差,这个基本上就是通过一个路由库来处理服务器请求,目前网上有不少相似的路由库可以直接被调用,不过这次基于学习Go的目的,我打算简单写一个路由库,对于RESTful API的路由还是比较简单的,主要就是将路径转换成对应的业务处理函数和对应的参数,如下的一个RESTful API请求:

GET: http://localhost/herb/{id}

通过调用 gorilla/mux 这个路由库可以直接在路径中添加变量,通过如下的一条语句就能完成简单的一个RESTful API的配置

r := mux.NewRouter()
r.HandleFunc("/herb/{herbID}",herbGet).Methods(http.MethodGet)

RESTful的接口测试结果

对于GraphQL的支持,Go也是通过第三方库来完成的,也不过尝试了几个开源GraphQL的库,比如“github.com/graphql-go/graphql”,但是没有直接写出一个可用的GraphQL接口,花了大半天查了一些文档,还是无法解决。只能说Go的相关文档和开源库的确不稳定,感觉有点需要瞎猫碰到死耗子的运气。当然,这个完全是因为我还是初次接触Go这门语言,还没有花精力深耕。

结合GraphQL和Go

不过对于Go来说无论是RESTful还是GraphQL的API在开发过程中的效率应该都差不多,基本都是可以调用已有的开源库,如果自己开发相应的库,可能RESTful会更简单一点,毕竟可以直接基于Go的原生库net/http。

数据连接

Go需要添加第三方的数据库驱动来支持mysql,只需要如下将相应的驱动库import就能连接MySQL服务器了。因为驱动不是直接调用,所以添加了一个下划线前缀

 import _ “github.com/go-sql-driver/mysql"

不过Go环境中支持的database/sql支持的功能非常简单,就是直接连接和执行查询语句,然后通过遍历查询返回的Rows加入到相应的interface内。而且查了一下有不少第三方数据库Client库可以调用,这样对查询结果的处理会方便很多。不过作为初步尝试,写了一个简单的查询语句,然后将查询语句转存入一个map内。在尝试的过程中充分了解了一下Go对内存指针的机制。虽然不是很直观,不过能发现Go对于内存管理的优势和静态类型的特性。

虽然开始的时候还是花了几个小时了解整体数据查询结果的处理,不过还算基本了解了整体的机制和特性,而且还有可能通过调用第三方库来进一步简化整个开发过程。

语言结构

对于Go的语言结构一开始还是有点不习惯,已经有很长一段时间没有写过静态类型和使用内存指针的编程语言了。而且Go对于变量类型的定义是后置的,有点点的奇怪不是太习惯。

var demoName string

不过整体来说,Go的语言结构还是非常简洁的,而且对于Go中一些新设计用起来还是蛮不错的,例如通过:=来直接完成变量初始化和定义,函数的双变量返回也非常有用。作为编译型的编程语言,Go对于代码的整洁要求还是做得很好,不允许import未用的库和未使用的变量等,这样可以让代码没有任何的浪费空间。Go还能支持加载远程库,这个功能非常重要,对于依赖各种库的Go来说能直接调用,然后编译还是非常方便的。

虽然Go语言结构和之前使用的语言不一样,但是熟悉后就能体会到代码整体的简洁特性。

文档社区

网上已经能找到不少Go的文档,像阿里云或者腾讯开发者社区都有维护一些文档,但是我感觉文档还是Go的一个短板,不是体现在基础参考文档,而是对于一些第三方库的文档或者一些特别问题的解决方案等文档会比较少,尤其是中文的文档。不过Go社区还算是活跃的,而且像在github上使用Go的第三方库的数量应该是前三的。整体来说文档和社区文档比较少,不过能解决问题的第三方库还是非常完善的。

总结

通过简单做了一些Demo体验了一下Go,虽然不能说百分之百了解这门语言,但是还是对于它简洁的语言结构比较欣赏的,也同样有过于依赖开源库的问题,虽然现在绝大多数高级语言都会有这个依赖的问题,使用习惯之后可能也就不成为问题了。最主要的还是Go语言可查看的文档比较有限,尤其官方文档基本上是打不开的,这点上对于后续学习开发还是有一定的障碍。不过鉴于Go还是属于比较年轻的一个编程语言,发展方面还是非常值得期待的。


希望你喜欢这次的分享,如果喜欢的话,可以点赞让我知道一下!如有不同想法或是对之后内容的建议,可以在评论区讨论一下。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码