python和go,go比python简单吗

  python和go,go比python简单吗

  go语言和python的区别:1。python在接受输入时直接使用input函数,而go语言要一直监听scan();2.发送网络请求python处理比go语言更友好;3.go语言比python效率高;4.go语言很容易打包。

  背景

  主要的工作语言是Python。今年,我们需要制作性能测试工具。因为GIL锁,Python的表现实在是惨淡,所以我们需要学习一门高性能的语言来生成性能测试的压力面。所以我把目光放在了现在的菜鸟围棋上。经过一段时间的学习,我也写了一个小工具来记忆两种语言的区别。

  要求

  工具是一个小爬虫,用来抓取一个网站上某个产品的迭代记录。实现的逻辑是,运行脚本后,用户输入一些元素(产品ID等。)中,脚本会导出一个Excel文件。

  的原始版本是用Python编写的,只用了不到30行代码就完成了。这次用Go重写,代码量大概110行。

  接受输入

  第一步是接受来自命令行的输入。该工具面向非技术人员,不适合获取CLI。想要的效果是逐行输入。用Python实现非常容易,像这样:app_id=raw_input(请输入app_id:)

  App_analysis=raw_input(请输入分析:)

  执行完之后就是一行一行往下,但是用Go就有点疼了。完整的代码如下:func getPara() (string,string) {

  var i=0

  var appId,分析字符串

  Fmt。打印(请输入appId:)

  扫描仪:=bufio。新闻扫描器(os。标准输入)

  用于扫描仪。扫描(){

  文本:=扫描仪。文本()

  如果i==0

  appId=text

  Fmt。打印(请输入分析:)

  } else if i==1 {

  分析=文本

  Fmt。打印(程序初始化数据完成。请按任意键继续’)

  }否则{

  破裂

  }

  我

  }

  返回appId,分析

  }

  CLI实现起来很方便,但是到了这种逐行输入的时候就要一直监控Scan(),于是就有了上面这个蛋疼的循环。而且你要先打印信息,再监控内容。整个写作过程很恶心。也许你还没有找到更好的方法。真的是逆天。

  即时战略游戏

  从发送请求的便利性来说,两种语言没有太大区别,至少我写的Get请求是这样的。计算机编程语言

  params={

  分析:app_analysis,

   appid: app_id,

  国家:中国

  }

  r=requests.get(url,params)Go

  q :=req。URL.Query()

  q.Add(appid ,appid)

  问:添加(“分析”,分析)

  q .添加(国家,中国)

  请求。URL.RawQuery=q.Encode()

  var resp *http。反应

  resp,_=http。Do(req)

  返回结果处理

  Python太友好了,无法处理返回的结果。直接调用json就可以了。result=r.json()

  但是,围棋有点疼。因为是静态语言,所以在解包数据时需要先定义数据格式。例如,返回的内容必须定义如下:type ResultInfo struct {

  代码int

  消息字符串

  版本[]版本信息

  }

  类型版本信息结构{

  版本字符串 json:version

  ReleaseTime字符串` json:release_time

  ReleaseNote字符串 json:release_note

  AppName字符串 json:app_name

  字幕字符串 json:subtitle

  }

  第一个ResultInfo是返回的数据,它的版本也是一个数组对象,所以需要定义另一个数组对象,这样就可以调用方法来解包。正文,_ :=ioutil。ReadAll(resp。正文)

  var rst=ResultInfo{}

  如果err :=json。解组(body,rst);呃!=零{

  fmt。Println(错误)

  }

  将数据写入Excel

  这部分调用是第三方库,没有可比性。代码的实现完全依赖于第三方包。

  到处出错!=零

  Go的异常捕捉机制不同于Python或者Java。Python的异常捕捉使用try和except来包装代码块,而Go使用一个error对象,所以所有的Go代码都会填充大量的if err!=零{

  返回零,错误

  }

  这种鬼,这种不正常的机制在读代码的时候非常恶心,极大的影响了阅读体验。

  吐完之后

  基本上从写代码的过程来看,Python的编码效率比Go高很多。Go号称语法灵活,可以大大提高编码效率。其实不是,而且受静态语言的限制。与Python这种动态语言相比,编码效率差距还是很大的。只有口语比其他静态语言效率高。

  但是!Go比Python效率高很多。例如,有一种算法可以计算吸引叶子的数量。Go的实现如下:

  func main() {

  常数n=40

  开始时间:=时间。现在()

  fibN :=fib(n)

  结束时间:=时间。现在()

  成本时间:=结束时间。Sub(开始时间)

  fmt。Println(成本时间)

  fmt。Printf(\rFibonacci(%d)=%d\n ,n,fibN)

  }

  函数纤维(x整数)整数{

  如果x 2 {

  返回x

  }

  返回光纤(x-1)光纤(x-2)

  }

  这是一个简单的递归。当n为40时,Go耗时约1秒,执行结果如下:876.838ms(耗时)

  斐波那契(40)=102334155

  让我们换成Pythondef fib(x):

  如果x2:

  返回x

  返回光纤(x-1)光纤(x-2)

  if __name__==__main__ :

  导入时间

  begin=time.time()

  印刷纤维(40)

  end=time.time()

  打印结束-开始

  同样的执行逻辑,但是执行结果是:102334155。

  2.8657081127(时间消耗)

  WTF!Go的效率是Python的50多倍。

  这还不是全部。工具写出来之后,总要被人用。Python写出来之后,如果被非技术人员使用,那么。用户:怎么用?

  Me:您安装Python,然后匹配环境变量,并安装请求库和xlwt库。

  我:要安装这两个库,得先安装pip。

  用户:黑人问号脸!

  如果用Go写,打包发就好了。用户:怎么用?

  我:你双击,想打什么就打什么。

  如果用户用的是Windows系统,那没问题。

  CGO _ ENABLED=0 GOOS=windows go arch=amd64 go build XXX . go

  直接打包成exe文件。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: