您当前的位置: 首页 >  Python

对比学习:Golang VS Python3,帮助 Python 快速了解 Go

蔚1 发布时间:2019-08-30 23:30:56 ,浏览量:3

Golang 和 Python 都是目前在各自领域最流行的开发语言之一。

Golang 其高效而又友好的语法,赢得了很多后端开发人员的青睐,最适用于高并发网络编程的语言之一。Python 不用说,TIOBE 排行榜的前十常驻居民,现在已经稳定在前五了。在机器学习、AI、数据分析领域成为必学语言。

两门编程语言在语法上都有各自的特点,而且都易学易用。Go 和 Python,一个是静态语言一个是动态语言,从各个方面来看,都有根本性的差异,所以,文中很多内容不进行深入的比较了,我们只从程序员最直观的语法面做对比。

  • 字符编码
  • 保留字(关键字)
  • 变量赋值
  • 标准数据类型
  • 数据类型转换
  • 条件/循环语句
  • 函数
  • 模块
  • 导入包
  • 错误和异常
  • 面向对象
  • 多线程

Golang 和 Python 都是目前在各自领域最流行的开发语言之一。

Golang 其高效而又友好的语法,赢得了很多后端开发人员的青睐,最适用于高并发网络编程的语言之一。

Python 不用说,TIOBE 排行榜的前十常驻居民,现在已经稳定在前五了。在机器学习、AI、数据分析领域成为必学语言。

两门编程语言在语法上都有各自的特点,而且都易学易用。

本文对比这两门语言目的不是争谁优谁略,只是为了对比学习,适合掌握 Python 想学 Go 或者掌握 Go 想学 Python 的同学们参考。

Go 和 Python,一个是静态语言一个是动态语言,从各个方面来看,都有根本性的差异,所以,文中很多内容不进行深入的比较了,我们只从程序员最直观的语法面做对比。

为了便于阅读,文中涉及代码都采用尽量简单的语句呈现

字符编码 Python

Python2 中默认的编码格式是 ASCII 格式,程序文件中如果包含中文字符(包括注释部分)需要在文件开头加上 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了

Python3 默认支持 Unicode

Golang

原生支持 Unicode

保留字(关键字) Python

30 个关键字

and    exec    notassert    finally orbreak    for passclass    from    printcontinue global    raisedef    if  returndel    import  tryelif    in  whileelse    is  withexcept    lambda  yield复制代码
Golang

25 个关键字

break    default func    interface   selectcase    defer   go  map structchan    else    goto    package switchconst    fallthrough if  range   typecontinue    for import  return  var复制代码
注释 Python
# 单行注释'''多行注释多行注释'''"""多行注释多行注释"""复制代码
Golang
//单行注释/*多行注释多行注释*/复制代码
变量赋值 Python

Python 是动态语言,所以在定义变量的时候不需要申明类型,直接使用即可。 Python 会根据值判断类型。

name = "Zeta" # 字符串变量age = 38 # 整数income = 1.23 # 浮点数复制代码

多变量赋值

a,b = 1,2 # a=1; b=2c = d = 3 # c=3; d=3复制代码
Golang

Go 是静态语言,是强类型的,但是 Go 语言也允许在赋值变量时确定类型。

因此 Go 有多种申明变量的方式

// 1\. 完整的申明并赋值var a inta = 1// 2\. 声明变量类型同时赋值var a int = 1// 3\. 不声明类型,赋值时确定var a = 1// 4\. 不用 var 关键字申明变量并赋值后确定类型a := 1复制代码

注意,Go 中的 new 关键字并不是声明变量,而是返回该类型的指针

a := new(int) //这时候 a 是一个*int 指针变量复制代码
标准数据类型 Python 的标准数据类型有:
  • Boolean(布尔值)
  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)
Golang
  • boolean(布尔值)
  • numeric(数字)
  • string(字符串)
  • 数组(数组)
  • slice(切片:不定长数组)
  • map(字典)
  • struct(结构体)
  • pointer(指针)
  • function(函数)
  • interface(接口)
  • channel(通道)
总结

Python 中的List 列表对应 Go 语言中的Slice 切片

Python 中的Dictionary 字典对应 Go 语言中的map

有一些值得注意的地方:

  • Go 是支持函数编程的语言,所以在 Go 语言中函数是一个类型
  • Go 语言不是面向对象的语言,没有定义类的关键字 Class,要实现 OOP 风格编程,是通过 struct、interface 类型实现的
  • Python 中的元组和集合在 Go 中都没有
  • channel 是 Go 里独有的类型,多线程之间的通信就靠它
数据类型转换 Python

Python 类型转换非常简单,用类型名作为函数名即可。

int(n)            # 将数字 n 转换为一个整数float(n)          # 将数字 n 转换到一个浮点数str(o)            # 将对象 obj 转换为字符串tuple(s)          # 将序列 s 转换为一个元组list(s)           # 将序列 s 转换为一个列表set(s)            # 将序列 s 转换为一个集合复制代码
Golang

Go 语言的基础类型转换和 Python 差不多,也是用类型名作为函数名

i := 1024f := float32(i)i = float32(f)复制代码

另外,Python 中可以直接转换数字字符串和数字:

s = "123"i = 456print(int(s), str(i))复制代码

但是 Go 是不可以的。

Go 语言的字符串处理很不同,string()只能用于[]byte类型转换成字符串,其他基础类型的转换需要用strconv包,另外,其他类型转换成为string类型除了用strconv包,还可以用fmt.Sprintf函数:

package mainimport (    "fmt"    "strconv")func main() {    s := "123"    i, _ := strconv.Atoi(s)    println(i)    s2 := fmt.Sprintf("%d", 456)    println(s2)}复制代码

Go 中的 interface 类型是不能直接转换成其他类型的,需要使用到断言

package mainfunc main() {var itf interface{} = 1i, ok := itf.(string)println("值:", i, "; 断言结果", ok)j, ok := itf.(int)println("值:", j, "; 断言结果", ok)}复制代码

输出为:

值:  ; 断言结果 false值: 1 ; 断言结果 true复制代码
条件语句 Python

Python 传统的判断语句如下

if name == 'zeta':          # 判断变量是否为 zeta     print('Welcome boss')   # 并输出欢迎信息else:    print('Hi, ' + name)  复制代码

Python 不支持三元表达式,但是可以用一种类似的替代办法

title = "boss"name = "zeta" if title == "boss" else "chow"print(name)复制代码

逻辑与用 and ,逻辑或用 or

Golang

Go 的if的语法类似 Java,但是表达式不需要使用()

if a > b{    println("a > b")} else {    println("a             
关注
打赏
1688896170
查看更多评论
0.1206s