近期偶然對 Go 語言產生了興趣,於是初略學習了一下,感覺確實非常犀利。
Go 于 2009 年由谷歌开发完成。它解决了一个问题,创建出一种没有 C++等语言的过重包袱和过分设计的语言。 这使得 Go 在性能和速度上都有极大提升,使用 Go 工作成为一件乐事。
此外,大部分第一次使用 Go 语言的开发者不会感觉到不便,因为 Go 中的熟悉元素及其易用性构成了一项惊喜。这并不是说 Go 语言在所有情况下都是完美的。 虽然它将速度和优雅度提升到新的层次,但也舍弃了一些用户期望的功能。比如,它不具备大量库,也不支持继承。此外,它没有 GUI 库,也不支持对象导向的编程。Go 语言的特点表明它具备轻量级线程实现(Goroutine)、智能标准库、强大的内置安全性,且可使用最简语法进行编程。

官網上的介紹:
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

知乎上有文章進行了Python和Go詳細對比分析,感興趣的可以 查看原文

小測試

編寫了一個計算1w以内素數的脚本,對比Python和Go的耗時情況。

  • Go脚本,運行基本在 50 毫秒左右。
package prime

import (
	"fmt"
	"time"
)

// GetPrime 用于计算素数
func GetPrime() int {
	fmt.Println("start")
	/*
   	素数:打印2-100内的素数。只能被2和本身整除。
    */
	t := time.Now()
	countsum := 0
	for i := 2; i <= 10000; i++ {
		count := 0 //用于统计i被整除的次数
		for j := 2; j < i; j++ {
		   if i%j == 0 {
			  count++
			  break
		   }
		}
		// fmt.Println(count)
		if count == 0 {
		//    fmt.Println(i, "是素数")
		countsum++
		}
	 }
	elapsed := time.Since(t)
    fmt.Println("app elapsed:", elapsed)
	return countsum
}
  • Python脚本,運行基本在 660 毫秒左右。
# -*- coding:utf-8 -*-
'''
求 n 以内的素数个数,并获得耗时
'''

import datetime
import time

t1 = datetime.datetime.now().microsecond
t3 = time.mktime(datetime.datetime.now().timetuple())

prm_lst = []

def get_prime(num0):
    rst = False
    if num0<=1:
        # print('这不是质数')
        rst = False
    elif num0==2:
        # print('这是一个质数!')
        rst = True
    else:
        i=2
        while i<num0:
            if num0%i==0:
                # print('这不是一个质数')
                break
            i=i+1
        else:
            # print ('这是一个质数!')
            rst = True
    return rst

for i in range(0, 10000):
    if get_prime(i):
        prm_lst.append(i)


t2 = datetime.datetime.now().microsecond
t4 = time.mktime(datetime.datetime.now().timetuple())
strTime = 'funtion time use:%dms' % ((t4 - t3) * 1000 + (t2 - t1) / 1000)
print(len(prm_lst), strTime)

總結

以上對比可見,個人覺得 Go 性能確實優越(本人業餘水平,測試不一定專業嚴謹)。而且在計算100w級別的時候二者差異更是明顯。
我此前學習的是Delphi,後來自學Python,現在來學習Go語言,覺得一些基本感念比較容易理解。以後有時間再深入學習吧。