首页 > 其他分享 >为什么我要使得GOLang重写SAAS(软件即服务)服务端

为什么我要使得GOLang重写SAAS(软件即服务)服务端

时间:2024-05-05 12:44:22浏览次数:36  
标签:我要 语言 框架 SAAS GOLang 开发 Go 服务端

引言

“道”在中国哲学中,是一个重要的概念,表示“终极真理”。“道”这一概念,不单为哲学流派诸子百家所重视,也被宗教流派道教等所使用。大道至简的意思就是大道理是极其简单的,简单到一两句话就能说明白。所谓“真传一句话,假传万卷书”。

正文

在开启独立创作之路之前,我主要用不用.net 和 java等技术开发后端。那么,为什么我要选择一个不熟悉的技术呢?答案:大道至简

没有实践,哪来真知?

过去很多年,Java的生态很成熟,社区也比较强大。各种开源框架以及jdk,版本更新都是挺快的。而且jdk也在吸收更多其他语言的优点,并不是一成不变。其次,Java门槛比较低,也比较适合企业级应用开发。软件开发最终还是实现业务逻辑,各种框架和中间价等只是为了让开发更加简单和高效。业务逻辑才是王道。最后,Java经过那么多年的发展,市面上一大把的Java程序员,好招人,而go相关的人才较少,那为什么我还要选择GoLang重写服务端。一切都来源于实践。

SAAS(软件即服务)真的需要是什么?

  1. 超低的成本

    1. 无论是CPU的性能还是内存的空间,我需要的是最低的成本。
    2. Go 语言具有出色的性能,特别是在并发和网络编程方面。对于 SAAS 服务端来说,处理大量并发请求和高效的网络通信是非常重要的。Go 语言的轻量级线程(goroutines)和内置的并发原语(如 channels)可以极大地简化并发编程,同时保持出色的性能。
    3. 我真不想要垃圾回收器(GC),奈何对内存的管理是一件相当复杂的事,所以我只能退而求其次选择GC,GoLang的GC对于服务器端应用来说非常友好。它能够在保证内存安全的同时,减少内存泄漏和碎片化的风险。这对于长时间运行的 SAAS 服务端来说尤为重要。
  2. 快速的响应

    1. 易于部署和扩展:Go 语言编译后的程序是静态链接的,不依赖于外部运行时环境。这意味着你可以轻松地将 Go 程序部署到各种环境中,包括云服务器、容器和边缘设备等。此外,Go 语言的并发特性也使得它非常适合构建可扩展的 SAAS 服务。
    2. 强大的标准库:Go 语言拥有强大的标准库,包括网络编程、数据库操作、加密、压缩等各个方面。这使得在开发 SAAS 服务端时,你可以直接使用这些库来快速构建功能,而无需依赖外部库或框架。
    3. 简洁的语法和快速的开发速度:Go 语言的语法简洁易读,学习曲线相对平缓。同时,由于其编译速度快且运行时开销小,因此开发迭代和测试过程也非常迅速。这有助于加快 SAAS 服务端的开发进度。
  3. 稳定的服务

    1. Go 语言拥有一个庞大的开发者社区和丰富的生态系统。这意味着你可以轻松地找到相关的教程、库、工具和支持。这有助于降低开发风险和提高开发效率。
    2. 安全性和稳定性:Go 语言在设计和实现时非常注重安全性和稳定性。它提供了许多内置的安全特性,如内存安全、类型安全等。同时,由于其简洁的语法和严格的编译过程,Go 语言程序也更容易避免常见的编程错误和漏洞。
    3. 成本效益:使用 Go 语言重写 SAAS 服务端可能会带来一些初始的投资,但长期来看,它可以降低维护成本和提高开发效率。此外,由于 Go 语言在性能、可扩展性和安全性方面的优势,它还可以帮助你构建更具竞争力的 SAAS 产品。

实践中有很多画蛇添足的行为

在SAAS(软件即服务)的开发中,其实有很多画蛇添足的行为。比如:ORM(对象关系映射):

  1. 性能:
    • 使用一些框架,通常会在运行时进行各种封装、抽象和转换,这可能会引入一些额外的开销。对于需要高性能、低延迟的应用来说,直接使用最原生SQL或存储过程可能会更高效。直接生成数据,HTML更加灵活和高效。
  2. 灵活性:
    • 很多框架通常提供了一套固定的API和模式,这可能会限制开发者的灵活性。实际上,SAAS服务并不需要适配不同的数据库,有哪个用户关心你使用了MySQL、Orcale还是MsSQL。
    • 用户在意的是他的浏览器是否可以正常访问我们的网站,在这样的情况下,Vue,React的限制往往会忽略掉一些特别的用户访问。
  3. 学习曲线:
    • 无论我们学习什么框架,其实都需要在掌握基本的技术原理之外,还得掌握这个框架的一些特性。所以我们为什么要多学那些可能还会给我们带来更多问题的技术框架呢?

总结

需要注意的是,以上原因并不是绝对的,在某些情况下,框架可能会带来更高的开发效率和更好的代码质量。只是作为SAAS(软件即服务),没有必要为了解决一些开发效率,而引入更多的问题,我们需要的是答案。

标签:我要,语言,框架,SAAS,GOLang,开发,Go,服务端
From: https://www.cnblogs.com/zhumingwu/p/18173419

相关文章

  • 为什么我不选择React、Vue.js作为SAAS网站的前端框架
    引言“道”在中国哲学中,是一个重要的概念,表示“终极真理”。“道”这一概念,不单为哲学流派诸子百家所重视,也被宗教流派道教等所使用。大道至简的意思就是大道理是极其简单的,简单到一两句话就能说明白。所谓“真传一句话,假传万卷书”。正文在开启独立创作之路时,我也考虑过各种......
  • Golang:go-humanize将文件大小转换成Kb、Mb、Gb适合人类阅读的单位
    Golang:go-humanize将文件大小转换成Kb、Mb、Gb适合人类阅读的单位原创 吃个大西瓜 CodingBigTree 2024-05-0408:30 云南​最近去了昆明的教场中路体验了满屏蓝花楹,感受到了梦幻般的世界,随手拍了一张图,分享给大家,有时间可以去一趟,体验一次,顺便说一下,美女很多喔 ......
  • golang 官方代码 汇总
    go1.22.2-- 序章golang官网的代码汇总,汇总到一起,方便查阅。 注,如有侵权,请通知我处理......
  • 都说寒门难出贵子,身为一个普通的母亲,我要做些什么才能让我的孩子这一生过的好一点
    多炖几锅肉,他踢完球回来饿的嗷嗷的时候,盛上热腾腾的大米饭,擓着肉汤夹着肉,又烂乎又黏嘴,一碗接一碗,吃的他放下筷子直犯困。   多包几顿饺子,让他请同学来家,玩玩闹闹一通乱耍以后,一屉一屉的下。看着他们几个,嘴里满满腾腾的塞着饺子,还在那比谁吃的多。   多鼓励他几句,......
  • golang初学:交叉编译
    goversiongo1.22.1windows/amd64Windows11+amd64x86_64x86_64GNU/Linux--- 序章golang支持跨平台,支持的方式是在一个平台编译其它平台的可执行程序。本文介绍Windows11(开发主机)上编译Linux(目标主机)上的可执行程序。 #gobuild 开发主机和目标......
  • saas
    .前端请求商户平台应用进行注册2.商户平台应用获取短信验证码3.前端携带手机验证码、账号、密码等信息请求商户平台应用确认注册4.验证码校验通过后请求商户服务新增商户5.商户服务请求SaaS平台新增租户并初始化管理员6.SaaS平台返回创建成功给商户服务商户服务新增商户下......
  • 分享一份物联网SAAS平台架构设计
    一、架构图****二、Nginx****用于做服务的反向代理。三、网关****PaaS平台所有服务统一入口,包含token鉴权功能。四、开放平台****对第三方平台开放的服务入口。五、MQTT****MQTT用于设备消息通信、内部服务消息通信。六、Netty****Socket通信设备连接服务。七......
  • 【发现一个小问题】golang http client: 配置了Client 对象的 Timeout 就会导致 conte
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯我这样初始化了客户端:varclient=http.Client{Timeout:time.Duration(1000)*time.Millisecond,}然后在request创建过程中使用了context的timeout机制:tim......
  • 转载golang中net/http包用法
    转自:https://studygolang.com/articles/55151.前言http包包含http客户端和服务端的实现,利用Get,Head,Post,以及PostForm实现HTTP或者HTTPS的请求.2.本文分析内容安排函数结构3.函数3.1服务端函数funcHandle(patternstring,handlerHandler)将handler按照指定的......
  • golang将uint32与byte[]互转
    packagemainimport( "encoding/binary" "fmt")funcmain(){ //一个长度为4的byte切片,表示一个负数 bytes:=[]byte{0xFF,0xFF,0xFF,0xFF} //将byte切片转换为int32 num:=int32(binary.BigEndian.Uint32(bytes)) fmt.Printf("Byte切片转换为Int32:%d......