php程序员go语言学习过程

最近项目完工,遂学习学习go,写一下学习记录,加强记忆,顺带梳理下和php的差异

1.go是编译型语言

想想 C 语言编译、链接和安装可执行程序的繁琐步骤,首先要通过 configure 脚本对特定平台进行检测,比如是否包含 GCC 等编译工具,然后生成 Makefile 文件,该文件定义了编译、链接规则,为下一步编译工作做准备,接下来就是执行 make 命令进行编译工作,最后再执行 make install 命令完成应用程序的安装,经历过这些步骤才可以实现将 C 程序源代码编译为可执行程序。

安装过php拓展的都知道,php拓展也是由c编写的,需要编译安装,也是很麻烦

 

 

从上面的构建过程中可以看到,真正的构建命令就一句:

go build calc

这就是为什么说 Go 命令行工具是非常强大的。我们不需要写 makefile,因为这个工具会替我们分析,知道目标代码的编译结果应该是一个包还是一个可执行文件,并分析 import 语句以了解包的依赖关系,从而在编译 calc.go 之前先把依赖的 simplemath 编译打包好。Go 命令行程序制定的目录结构规则让代码管理变得非常简单。

2.go是静态语言

var v1 int    //声明变量 并未赋值

纯粹的变量声明,Go 语言引入了关键字 var,并且将类型信息放在变量名之后

 

PHP 是动态语言(昵称「鸭子类型」),变量在声明时没有类型之说,变量类型是在运行时动态判断的,不需要关键字 var 修饰,而是以 $ 作为变量名前缀实现类似的效果,也没有这种纯粹的声明语句(类的成员变量除外)

 

php可以直接声明变量,而后再赋值,这是弱类型语言的好处,当然坏处是 弱类型语言的使用在某些场景下内部的类型自动转换,导致业务判断逻辑,不为预期发展,而踩到坑(此时 可以强类型比较,或强制转换类型,即对赋值后的变量定义类型)

 

3.go的变量初始化

v3 := 10 //省略 var,编译器可以自动推导出v3的类型

对变量同时进行声明和初始化时,指定类型已不再是必需的,Go 编译器可以从初始化表达式的右值推导出该变量应该声明为哪种类型(纯粹的变量声明时可不能省略类型,那样会编译器会报错),这让 Go 语言看起来有点像动态类型语言,但是与 PHP 等动态语言不通的是,这个推导是在编译期做的,而不是运行时,所以 Go 语言还是不折不扣的静态语言。

php中变量类型的确认是在运行期间,而go是在编译期间,(个人理解,编译这个动作包含了运行,或者说运行时的检测),所以php作为解释型语言,不需要编译,这是开发效率的提升,同时也是生产时性能的牺牲

 

关于变量初始化和声明:

在 PHP 中,通常变量声明和初始化是一体的,即通过初始化的方式完成变量的声明,类的成员变量除外。

在 Go 语言中,变量初始化和变量赋值是两个不同的概念,变量初始化集变量声明和赋值为一条语句,

即 v3 := 10

变量赋值则是先声明变量,再对其进行赋值,

var v1 int

v1 = 123

初始化只能执行一次,赋值则可以执行多次。见下

 

另外,出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误,比如下面这个写法:

var i int 
i := 2

会导致如下这种编译错误:

no new variables on left side of :=

 

 

参考链接:https://laravelacademy.org/post/19724.html

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值