重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
是的,go语言的全称是:go programming language。go 这个词太通用了,搜索引擎不能很好辨认,所以习惯叫golang.
站在用户的角度思考问题,与客户深入沟通,找到吴江网站设计与吴江网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、成都网站制作、企业官网、英文网站、手机端网站、网站推广、空间域名、网站空间、企业邮箱。业务覆盖吴江地区。
c,go,Java,Python
搜索引擎是分层的,使用c,go,Java,Python等,编程语言没有太多局限,主要是算法及数据库及架构。
之前写过了Grpc服务开发和接口测试初探【Java】,中间耽搁了一些时间,Go版本的gRPC测试开发实践才有时间学习使用。其中也是由于自己Go语言不够熟悉导致的。之前有段时间想暂时放弃Go语言的学习,导致了Go的生疏,原因是从Groovy到Java性能。
回归正题,Go语言版本的gRPC实践相对Java来说是比较简单的,但是总体的工具链是比较复杂的,可能是因为Go生态目前相比Java还是比较匮乏吧。下面我先简述一下大致的步骤:
以上步骤亲自操作可能会遇到一些小问题,我本人搜到的教程什么的也是乱七八糟,踩了一些坑。我没有整理出一个亲自实践之后的可行的教程,原因有二:
Go语言的gRPC的 proto 编写跟Java大致一致,只有一个报名的参数不太一样。下面是我的 Hello.proto 内容:
这里主要 go_package 网上搜到的配置方式有些不一样,我没有全都尝试,大家在搜索的资料时候,尽量先看看 syntax 这个参数的值,以及文章教程写作的时间,如果距离现在太久了,我建议直接关掉。搜索引擎有过滤功能,可以过滤掉过时的教程。
这里Go语言gRPC的一点优势,就是在一个项目中即可实现,Java需要先弄一个SDK这样。Go语言的gRPC的代码可以通过生成代码命令中的参数实现指定路径。我是放在了和 proto 文件的同级目录。
服务端代码也是比较格式化的内容,如下:
其中 pb.RegisterHelloServiceServer(s, Ser{}) 如果报错,请检查自己安装的工具 protoc-gen-go 或者 protoc-gen-gofast 版本,一般提取报错 message 搜索也能得到解决办法。
下面是客户端的代码,由于学艺不精,其中大部分参数的含义目前我也不是很清楚,特别是基于 stream 的请求响应的方式使用。后面我先把Java的学完,再回过头来看Go的,按照这个顺序学习和分享。
服务端输出:
忘记打日志了。没有输出
客户端输出:
Go语言的gRPC测试开发实践已经完事儿,大概率上我不会在工作中使用Go作为主力gRPC测试语言,后面测试实践内容还是会以Java为主。
google对技术非常开放,使用了很多常用的开放式编程语言。C++、Java、python是它的搜索引擎的主要编程语言。现在Go语言是google新产品的主要编程语言,很多在线服务都是Go语言编写的。针对它旗下的Android操作系统和相关产品采用的是C结合Linux系统以及Java语言。
一、操作系统:
Microsoft Windows : 汇编 - C - C++
备注:曾经在智能手机的操作系统(Windows Mobile)考虑掺点C#写的程序,比如软键盘,结果因为写出来的程序太慢,实在无法和别的模块合并,最终又回到C++重写。
相信很多朋友都知道Windows Vista,这个系统开发早期比尔盖茨想全部用C#写,但是最终因为执行慢而放弃,结果之前无数软件工程师日夜劳作成果一夜之间被宣告作废。
Linux :C
Apple MacOS : 主要为C,部分为C++。 备注: 之前用的语言比较杂,最早是汇编和Pascal。
Sun Solaris : C
HP-UX : C
Symbian OS : 汇编,主要为C++。 (诺基亚手机)
Google Android :2008 年推出: C语言(有传言说是用Java开发的操作系统,但最近刚推出原生的C语言SDK)
RIM BlackBerry OS 4.x : 黑莓 C++
二、图形界面层
Microsoft Windows UI : C++
Apple MacOS UI (Aqua) : C++
Gnome (Linux图形界面之一,大脚): C和C++, 主要是C。
KDE (Linux图形界面) ,C++。
三、桌面搜索工具
Google Desktop Search : C++
Microsoft Windows Desktop Search : C++
Beagle (Linux/Windows/UNIX 下): C# (基于开源的 .net : Mono)
四、办公软件
Microsoft Office : 在 汇编 - C - 稳定在C++
Sun Open Office : 部分JAVA(对外接口),主要为C++ (开源,可下载其源代码)
Corel Office/WordPerfect Office : 1996年尝试过Java,次年被抛弃,重新回到C/C++
Adobe Systems Acrobat Reader/Distiller : C++
五、关系型数据库
Oracle : 汇编、C、C++、Java。主要为C++。
MySQL : C++
IBM DB2 : 汇编、C、C++,主要为C。
Microsoft SQL Server : 汇编 - C-C++
IBM Informix : 汇编、C、C++,主要为C。
SAP DB/MaxDB : C++
六、Web Browsers/浏览器
Microsoft Internet Explorer : C++
Mozilla Firefox : C++
Netscape Navigator : The code of Netscape browser was written in C, and Netscape engineers, all bought to Java (see M. Cusumano book and article) redeveloped the browser using Java. It was too slow and abandoned. Mozilla, the next version, was later developed using C++.
Safari : (2003年1月发布)C++
Google Chrome : (2008的发布)C++
Sun HotJava : Java (死于1999年)
Opera : C++ (手机上占用率比较大)
Opera Mini : Opera Mini (2007) has a very funny architecture, and is indeed using both C++ and Java. The browser is split in two parts, an ultra thin (less than 100Kb) "viewer" client part and a server side responsible of rendering. The first uses Java and receives the page under the OBML format, the latter reuses classical Opera (C++) rendering engine plus Opera's Small Screen Rendering, on the server. This allows Opera to penetrate various J2ME-enabled portable devices, such as phones, while preserving excellent response time. This comes obviously with a few sacrifices, for instance on JavaScript execution.
Mosaic : 鼻祖(已死) C 语言
七、邮件客户端
Microsoft Outlook : C++
IBM Lotus Notes : Java
Foxmail : Delphi
八、软件开发集成环境/IDE:
Microsoft Visual Studio : C++
Eclipse : Java (其图形界面SWT基于C/C++)
Code::Blocks : C++
易语言: C++
火山中文: C++
火山移动: C++
九、虚拟机
Microsoft .Net CLR (.NET的虚拟机): C++
Java Virtual Machine (JVM) : Java 虚拟机:C++
十、ERP软件 (企业应用)
SAP mySAP ERP : C,后主要为“ABAP/4”语言
Oracle Peoplesoft : C++ - Java
Oracle E-Business Suite : Java
十一、商业智能(Business Intelligence )
Business Objects : C++
十二、图形处理
Adobe Photoshop : C++
The GIMP : C
十三、搜索引擎
Google : 汇编 与 C++,主要为C++
十四、著名网站
eBay : 2002年为C++,后主要迁至Java
facebook : C++ 和 PHP
This line is only about facebook, not its plugins. Plugins can be developed in many different technologies, thanks to facebook's ORB/application server, Thrift. Thrift contains a compiler coded in C++. facebook people write about Thrift: "The multi-language code generation is well suited for search because it allows for application development in an efficient server side language (C++) and allows the Facebook PHP-based web application to make calls to the search service using Thrift PHP libraries." Aside the use of C++, facebook has adopted a LAMP architecture.
阿里巴巴和淘宝: php-C++/Java(主要用)
十五、 游戏 :
汇编、C、C++
星际争霸、魔兽争霸、CS、帝国时代、跑跑卡丁车、传奇、魔兽世界.... 数不胜数了,自己数吧
都是用C++开发的,C++语言靠近系统地称,执行速度最快。比如你的两个朋友与你分别玩用VB、Java、与C++编写的“跑跑卡丁车”,你玩C++编写的 游戏 已经跑玩结束了,发现你的两个朋友还没开始跑呢,那是相当的卡啊,
十六、编译器
Microsoft Visual C++ 编译器: C++
Microsoft Visual Basic 解释、编译器: C++
Microsoft Visual C# : 编译器: C++
gcc (GNU C compiler) : C
javac (Sun Java compiler) : Java
Perl : C++
PHP : C
十七、3D 引擎
Microsoft DirectX : C++
OpenGL : C
OGRE 3D : C++
十八、Web Servers (网页服务)
Apache : C和C++,主要为C
Microsoft IIS : C++
Tomcat: Java
Jboss: Java
十九:邮件服务
Microsoft Exchange Server : C-C++
Postfix : C
hMailServer : C++
Apache James : Java
二十:CD/DVD 刻录
Nero Burning ROM : C++
K3B : C++
二十一:媒体播放器
Nullsoft Winamp : C++
Microsoft Windows Media Player : C++
Microsoft Windows Media Player : C++
二十二:Peer to Peer (P2P软件)
eMule : C++
μtorrent : C++
Azureus : Java (图形界面使用基于C/C++的SWT,类Eclipse)
二十三:全球定位系统(GPS)
TomTom : C++
Hertz NeverLost : C++
Garmin : C++
Motorola VIAMOTO : 2007年6月,停止服务。 Java。
二十四:3D 引擎
Microsoft DirectX : C++(相信玩 游戏 的同学都知道这个,现在最高版本是DX11)
OpenGL : C
OGRE 3D : C++
二十五:服务器软件
Apache: C
Nginx: C
IIS: C
二十六:其他相关
OpenStack: Python
综述
著名的软件一般是系统软件,软件一般都分为系统软件和应用软件。开发软件分为一次开发和二次开发,比如开发操作系统(系统软件),就是一次开发;在操作基础上进行应用软件的开发,比如开发 游戏 ,就是二次开发。
一次开发的系统软件,要直接调用硬件资源,必须使用简单、直接的底层语言和中层语言,比如汇编和C语言;二次开发应用软件等,因为应用软件的类别比较多的,针对的情况比较复杂和具体,因此可以选择的语言很多,比如,大数据人工智能方面的有Python;安卓手机APP就是Java等等。
这里还有一个误区,其实语言不重要,每种语言都差不多,重要的是开发环境和编程思想。要学习编程开发,学的不是语言,而是对于开发环境工具的使用和编程思维的锤炼。很多著名的软件都是用C等底层语言编写的,但是也可以用其他语言编写,不过很少学C了,其中有商业的原因。(后面会解释)
集成开发环境软件
计算机语言是不可以单独拿出来说的,比如我们说C语言,指的是C语言编译器,而Python语言,指的是Python解释器。而编译器和解释器却都是用C语言编写,是不是很意外,所以著名的软件一般都是系统软件,使用的是C语言,一个语言就要初中水平就可以学会了,但必须了解IDE开发环境。
要使用计算机语言,就必须安装编译器,或者是解释器,程序员是在TXT文本上编写语言的,用编译器可以一次性编译为可执行文件exe,用解释器则可以逐条翻译成机器语言并逐条执行。编译器速度快,解释器可以跨系统,到了别的系统,不需要程序员改写程序,换一个解释器就行了。
IDE集成开发环境具备图形操作界面、编译器、调制器、控制台,是非常重要的开发工具的,只会一个计算机的语言语法,却不会使用IDE,基本上是没用的!
编程思想
很多著名的软件都是使用C等底层语言编写的,而且所用的都是编译器。当然还有另外一个原因,就是编程思想,C语言是面向过程,Python是面向对象。很明显,一次开发的系统软件肯定是面向过程的,而面向具体使用场景的应用软件肯定是面向对象的。
高手可以自由使用编程思想、程序编写时,交替使用各种语言、切换解释器或者编译器,达到隐藏核心代码目的;又或者软件的核心模块采用C等底层代码,保证软件的运行速度。毕竟开发时都是模块化的,不同模块使用不同的方法都是可以的!
所以很多著名的软件,往往是混合着各种语言,核心部分是C,其他部分则根据不同的情况选用不同语言,之所以会这样做,是因为使用C开发软件要耗费大量的时间太。摩尔定律推动硬件发展,软件开发也受到影响,一个软件晚几天推出市场,效果完全不同,所以程序员经常加班赶工,速度才是最重要的。
总结
如上所述,著名的软件是使用C等底层语言、编译器语言、面向过程的语言编写的,更多的是在一个软件的核心部分使用C等底层语言、编译器语言、面向过程的语言,其他则见机行事。
现在主流的语言是java、python和go
因为内存管理粗糙。经常看到fmt.xxx导致内存占用太多,反射导致内存占用太多的抱怨。
go语言适合写服务器组件,那种和业务数据无关的服务器。比如数据库服务器、web服务器、日志搜索引擎等。如果用来写一个crm管理系统,非常累,因为缺乏好多高级特性和庞大的第三方库,而且语法比较单一,总体感觉就跟写命令行差不多。
Go语言是谷歌2009发布的编程语言,这个语言发明的目的,就是为了在运行速度接近C/C++语言的基础上(注意是接近),降低开发者的门槛,减少开发难度。
Go语言,在功能上没有超过C/C++,适用者为没有C/C++经验的开发者,开发出接近C效率的程序。对于已经熟练掌握C/C++的开发者来说,Go语言没有优势,还要重学语法,适应开发环境,明显是不符合效率的。
总结
其实语言这东西,都有其优势和劣势。而且有些东西并不是纯技术的。比如java的优势在于清晰的语意表达。写代码的上限不高,但是下限也不低,适合工业开发。
而go呢,不得不说go在微服务这块有先天优势。毕竟java中要实现go的很多功能,需要引入第三方库。很笨重。而go原生支持,这个微服务就很轻巧。但是go的语法太活,工业用是一个挺大的弊端。