PHP与GO的区别

2023-05-28 0 1,077

导出型词汇与校对型词汇无论从操控性上,却是从句法上有著非常大的差别。

我刚开始从PHP过渡到GO时,不论从句法上却是程式结构设计价值观上都觉得好不耐烦,PHP是程序语言的程式结构设计价值观,而GO更像面向全国包的结构设计价值观,因此刚写GO时能时常以PHP程式结构设计观念去写标识符方法论,考量承继考量隐式,其他的到时候传授,那时我总括了两项常用的PHP与GO句法上差别,有兴趣的好友能介绍呵呵。

PHP与GO的区别

一、表达式表述与表达式

这儿能显著注重脚本词汇与校对词汇的句法差别

PHP:弱类别表达式,同一表达式能随便表达式任何人正则表达式

$data = jack; $data = 15; $data = [name=>jack,age=>15];

GO:强类别变量,表达式需原订义,无法随便表达式相同正则表达式

var data string = “jack”//原订义表达式类别并表达式 data = “ben” data = 15 //收起:原订义数组类别,无法再表达式为auth

二、表达式表述与截取

Go介值截取较为方便快捷,PHP有向截取这类情形还需推论原素isset($data[nickname])

PHP:表达式只允许单个值截取

function getUser(){ return [ nickname=>Jack, city => beijing, age => 15, ]; } $data = getUser(); echo $data[nickname],$data[city],$data[age];

GO:表达式可截取多个值,且传参与回参需表述正则表达式

func main() { nickname,city,_ := getUser()// ’_‘ 选择忽略 忽略fmt.Println(nickname,city) }func getUser() (nickname string,city string,age int) { return “jack”,“beijing”,15 }

三、阵列(数组)

PHP对数组处理更方便快捷更强大,GO表述多维数组需考量类别,显得有点繁琐

PHP:表述一个数组表达式,无需考量原素类别任意的多层嵌入表达式

$arr1 = [1,2,3,4,5]; $arr2 = [a,b,c,d]; $arr3 = [ year => 2022, month => 03, day => 16, ]; $arr4 = [ jack => [ city => 广州, age => 23 ], ben => [ city => 深圳, age => 26 ], ];

GO:需区分数组(定长)、切片、映射、接口

//数组方式:必须表述长度 arr1 := [5]int{1,2,3,4,5} //切片方式:无需表述长度,自由扩展 arr2 := []string{“a”,“b”,“c”,“d”} //映射方式:键与值匹配表达式 arr3 := map[string]string{ “year”:“2022”, “month”:“03”, “day”:“16”, } //任意类别方式:好长 arr4 := map[string]interface{}{ “jack”:map[string]interface{}{ “city”:“23”, “age”:25, }, “ben”:map[string]interface{}{ “city”:“深圳”, “age”:25, }, }

四、抛出异常机制

GO设计初衷就不建议用try catch这种方式捕捉异常,在校对前就应该检查错误,很多人吐槽过这点。

PHP:try和catch能友好的捕捉标识符不规范的异常错误处理

try { if (1 == 1){ throw new \Exception(“抛出异常”); } }catch (\Exception $e){ echo “捕捉异常:”.$e->getMessage(); }

GO:与其他词汇相同,panic如果不用recover()会使整个主程序退出不可用

defer func() { if r := recover(); r != nil { fmt.Println(“捕捉异常”,r.(string)) } }()if 1 == 1 { panic(“抛出异常”) }

五、推论原素是否存在

PHP较为精简,内置表达式推论,GO推论显得有点不太人性化

PHP:简单用in_array与isset即可

$arr1 = [a,b,c]; if (in_array(a,$arr1)){ echo “存在”; } $arr2 = [name=>jack,city=>深圳]; if (isset($arr2[name])){ echo “存在”; }

GO:切片类别必须用遍历推论,Map映射需截取值推论

arr1 := []string{“a”,“b”,“c”} for _,val := rangearr1{if val == “a” { fmt.Println(“存在”) break } } arr2 := map[string]string{ “name”:“jack”, “city”:“深圳”, } if _,ok:= arr2[“name”];ok == true { fmt.Println(“存在”) }

六、承继

GO结构设计价值观就不是程序语言的程式结构设计,因此没有太多承继与隐式,编写价值观上需要改变。

PHP:extends关键词承继父类的方法和属性

class person{ protected $action = “”; protected function run(){ return “I can run”.$this->action; } } class man extends person{ public function index(){ $this->action = “swimming”; return $this->run(); } }

GO:struct结构体表述成员属性表达式,从而实现承继

type Person struct { Action string}func (p *Person) Run() string{ return “I can run and “ + p.Action } type Man struct { Person } func (m *Man) Index() { m.Action = “swimming” m.Run() }

总结:句法上各有各的优势,到时候从操控性上给大家传授呵呵差别。

#程序员##PHP##Go词汇#

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务