go和python学哪个好_go语言和python有什么区别
go语言和python的区别:1、接受输入时python直接采用input函数,而go语言要一直监听Scan();2、发送网络请求python处理比go语言更友好;3、go语言效率比python高;4、go语言打包简单。
背景
工作中的主力语言是Python,今年要搞性能测试的工具,由于GIL锁的原因,Python的性能实在是惨淡,需要学一门性能高的语言来生成性能测试的压力端。因此我把目光放在了现在的新秀Go。经过一段时间的学习,也写了一个小工具,记一下这两个语言的区别。
需求
工具是一个小爬虫,用来爬某网站的某个产品的迭代记录,实现逻辑就是运行脚本后,使用者从命令行输入某些元素(产品ID等)后,脚本导出一个Excel文件出来。
最初的版本是用Python写的,30行代码不到就搞定了。这次用Go重写,代码量在110行左右。
接受输入
第一步就是接受命令行的输入内容,工具要给非技术人员用的,弄一个CLI不太合适,要的效果就是一行一行的输入内容,用Python实现起来非常容易,像这样:app_id = raw_input('请输入app_id: ')
app_analysis = raw_input('请输入analysis: ')
执行后就是一行一行的往下走,但是用Go就有点蛋疼了,完整的代码如下:func getPara() (string, string) {
var i = 0
var appId, analysis string
fmt.Print("请输入appId:")
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
text := scanner.Text()
if i == 0 {
appId = text
fmt.Print("请输入analysis:")
} else if i == 1 {
analysis = text
fmt.Print("程序初始化数据完毕。。。。请按任意键继续")
} else {
break
}
i++
}
return appId, analysis
}
Go要实现CLI很方便,但是涉及到这种一行一行的输入,要一直监听Scan(),所以就有了上面蛋疼的循环处理,而且在必须要先打印信息,再来监听内容,总体的写的过程很恶心,也许是没有找到更好的方法吧,实在是太逆天了。
发送请求
在发送请求方便,两种语言倒是差别不太大,至少我写的Get请求是这样的。Python
params = {
"analysis": app_analysis,
"appid": app_id,
"country": 'cn'
}
r = requests.get(url, params)Go
q := req.URL.Query()
q.Add("appid", appId)
q.Add("analysis", analysis)
q.Add("country", "cn")
req.URL.RawQuery = q.Encode()
var resp *http.Response
resp, _ = http.DefaultClient.Do(req)
返回结果处理
在返回结果的处理上,Python的处理方式简直是太友好了,直接调用json就处理了。result = r.json()
但是Go就有点蛋疼了,由于是静态语言,所以解包数据的时候需要先定义数据格式,比如返回的内容必须要先做如下的结构定义:type ResultInfo struct {
Code int
Msg string
Version []VersionInfo
}
type VersionInfo struct {
Version string `json:"version"`
ReleaseTime string `json:"release_time"`
ReleaseNote string `json:"release_note"`
AppName string `json:"app_name"`
SubTitle string `json:"subtitle"`
}
第一个ResultInfo是返回的数据,其中的Version也是一个数组对象,所以还要再定义一个数组对象,这样才能调用方法来解包处理。body, _ := ioutil.ReadAll(resp.Body)
var rst = ResultInfo{}
if err := json.Unmarshal(body, &rst); err != nil {
fmt.Println(err)
}
写数据到Excel
这部分调用的都是第三方库,所以没什么可比性,代码的实现完全依赖于第三方包。
无所不在的err != nil
Go的异常捕获机制跟Python或者Java都不一样,Python的异常捕获使用的是try,except来包裹代码块,而Go用的是一个error对象,所以所有的Go代码都会充斥着大量的if err != nil {
return nil, err
}
这种鬼东西,这种异常机制在阅读代码的时候,非常恶心,极大的影响了阅读体验。
吐槽完后
基本上从书写代码的过程来看,Python的编码效率比Go高出了很多很多,Go号称语法灵活,可以极大的提高编码效率,实际上并没有,受限于静态语言,相比于Python这种动态语言来说,编码效率的差距还是非常大的。只能说比其他静态语言编码效率高。
但是!!!Go的效率比Python高了太多。举个例子,有一个计算斐波那契数的算法,Go的实现如下:
func main() {
const n = 40
starttime := time.Now()
fibN := fib(n)
endtime := time.Now()
cost_time := endtime.Sub(starttime)
fmt.Println(cost_time)
fmt.Printf("\rFibonacci(%d) = %d\n", n, fibN)
}
func fib(x int) int {
if x < 2 {
return x
}
return fib(x-1) + fib(x-2)
}
很简单的一个递归,当N为40的时候,Go花了大概1秒左右的时间,执行结果如下:876.838ms(消耗时间)
Fibonacci(40) = 102334155
我们换成Pythondef fib(x):
if x<2:
return x
return fib(x-1)+fib(x-2)
if __name__ == '__main__':
import time
begin = time.time()
print fib(40)
end = time.time()
print end-begin
一样的执行逻辑,执行的结果却是:102334155
52.8657081127(消耗时间)
WTF!!! 用Go来处理效率是Python的50倍以上。
还没完,工具写完了总是要给人用的吧,Python写完之后,如果给一个非技术人员使用,那么。。。使用者:要怎么用?
我:你装一下Python,然后配好环境变量,顺便把requests库和xlwt库也装一下。
我:要装这两个库你要先装一下pip。
使用者:黑人问号脸!!!!!
如果你用Go来写,打包完发过去就行了使用者:要怎么用?
我:你双击一下,让你输入什么就输入什么
如果使用者是用Windows系统,那也没问题,
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build xxx.go
直接打包成exe文件
go和python学哪个好_go语言和python有什么区别相关推荐
- go语言和python有什么区别_go语言和python有什么区别?
区别:1.Python是一种基于面向对象编程的多范式,命令式和函数式编程语言:Go是一种基于并发编程范式的过程编程语言.2.Python是动态类型语言,Go是静态类型语言.3.Python没有提供内置 ...
- go语言和python的区别_go语言和python的区别是什么?
什么是Python? Python是一种功能强大的高级编程语言,主要用于科学和工程计算.它是一种高效的语言,优雅务实,简单而强大,适合新手和专业人士的编程. Python支持多种编程范例,并提出了一个 ...
- c语言python是什么意思_c语言和python的区别是什么
c语言和python的区别是什么 发布时间:2020-09-10 10:17:30 来源:亿速云 阅读:84 作者:小新 这篇文章将为大家详细讲解有关c语言和python的区别是什么,小编觉得挺实用的 ...
- go语言 python哪个好学_go语言和python哪个难
Q1:Python,Ruby,Go语言哪个更值得学习 你这问的,你的是不是哪个语言更有发展前景是不? 一,Python 简单易懂,入门快,偏向处理数据分析,图形化,脚本 现今流行的爬虫,数据分析,dj ...
- go和python区别_Go语言和Python哪一个更容易学呢?
Python和Go都是用于编写Web应用程序的强大的高级编程语言,它们之间有什么区别吗?下面本篇文章就来带大家认识一下Python和Go语言,介绍一下Python和Go之间的区别,希望对大家有所帮助. ...
- go和python的难易度_go语言和python哪个难
Python和Go都是用于编写Web应用程序的强大的高级编程语言,它们之间有什么区别吗?下面本篇文章就来带大家认识一下Python和Go语言,介绍一下Python和Go之间的区别,希望对大家有所帮助. ...
- c语言和python先学哪个好,python和c语言先学哪个
c语言和python先学哪个? c语言和python先学哪个都可以,C语言和Python只是语法不同,作为入门语言各有各的好处.从C语言入门,C语言是面向过程的语言,其语法结构及其严谨,且应用十分广泛 ...
- python和c语言哪个更难学深_c语言和python先学哪个比较简单
c语言和python相比来说,python要简单一些,先学python容易上手.不过,c语言比python难,如果先学c语言能够打好基础,日后再学习别的语言要简单得多.不管先学哪个都可以,看大家自己怎 ...
- 先学python还是r-r语言和python有必要都学吗
R和Python是目前最流行的两款高级编程语言,被大量运用于数据科学领域.两者都是开源的,也都有非常活跃的社区来支撑.那么问题来了:r语言和python有必要都学吗 R: R语言由新西兰奥克兰大学的R ...
最新文章
- I hope so 2016-Oct-10
- ajax获取php echo值,ajax 接受 php echo 与 return 区别
- 安装Exchange Server2016管理工具
- python最基本的规则是什么_2015/8/26 Python基础(1):基本规则及赋值
- Atitit 项目的主体设计与结构文档 v5
- [译]创建物化视图的先决条件
- 在webpack中使用eslint配置(详细教程)-js教程-PHP中文网
- html文本框整数范围,验证HTML表单文本框中的数值范围。 PHP或Javascript
- CF622F-The Sum of the k-th Powers【拉格朗日插值】
- Java最新大厂面试真题总结,瞬间高大上了!
- 1.4Activity保存现场状态
- 判断三个数是否能构成三角形_三角形的面积
- Sublime Text批量删除空白行
- Android平滑移动——Scroller类研究
- Eclipse 工具栏不见了
- 2018年度报告单_2018年度最佳在线IT课程
- phpMyAdmin创建数据库无权限解决方案
- TOPSIS(优劣解距离法)
- 干货 | 百亿节点,毫秒级延迟,携程金融基于nebula的大规模图应用实践
- 中国邮路算法(中国邮递员问题)(详细)