请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

Go 与 PHP 的语法对比

[复制链接]
查看: 36|回复: 0

2万

主题

2万

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
70839
发表于 2020-1-17 02:34 | 显示全部楼层 |阅读模式
Go 是由 Google 计划的一门静态范例的编译型说话。它有点类似于 C,可是它包括了更多的优点,比如渣滓采取、内存平安、结构范例和并发性。它的并发机制使多核和收集呆板可以发挥最大的感化。这是 GoLang 的最好卖点之一。此外,Go 速度快,表示力强,清洁且高效。这也是 Go 如此吸引斥地者进修的原因原由。
PHP 是一种静态范例说话,它使新手更轻易编写代码。现在的题目是,PHP 斥地职员能否从静态范例说话切换到像 Go 这样的静态范例说话?为了找到答案,让我们对照一下 Go 和 PHP 之间的语法差别。
八重樱:怎样从一位码农成为架构师的必看常识点:目录大全(不定期更新)zhuanlan.zhihu.com
数据范例


  • Go 同时支持有标记和无标记整数,而 PHP 只支持有标记整数。
  • 另一个重要区分是数组。Go 对 array 和 map 有零丁的范例,而 PHP 数组现实上是有序的 map。
  • Go 与 PHP 相比没有工具。可是,Go 有一个类似于 object 的 struct 范例。
PHP 数据范例:
  1. booleanstringinteger // Signed integer, PHP does not support unsigned integers.float (also known as "floats", "doubles", or "real numbers")arrayobjectnullresource
复制代码
Go 数据范例:
  1. stringboolint  int8  int16  int32  int64 // Signed integeruint uint8 uint16 uint32 uint64 uintptr // Unsigned integersbyte // alias for uint8rune // alias for int32float32 float64complex64 complex128arrayslicesmapstruct
复制代码
变量

Go 利用 var 声明全局变量和函数变量。可是,它也支持带有初始化步伐的简写语法,但只能在函数内部利用。另一方面,PHP 仅支持带有初始化步伐的变量声明。
  1. // 变量声明// Go               // PHPvar i int           $i = 0      // integervar f float64       $f = 0.0    // floatvar b bool          $b = false  // booleanvar s string        $s = ""     // stringvar a [2]string     $a = []     // array// 简短的变量声明// Go                      // PHPi := 0                     $i = 0      // integerf := 0.0                   $f = 0.0    // floatb := false                 $b = false  // booleans := ""                    $s = ""     // stringa := [1]string{"hello"}    $a = []     // array
复制代码
范例转换
  1. // Goi := 42             // Signed integerf := float64(i)     // Floatu := uint(f)        // Unsigned integer// PHP$i = 1;$f = (float) $i;    // 1.0$b = (bool) $f      // true$s = (string) $b    // "1"
复制代码
数组
  1. // Govar a [2]stringa[0] = "Hello"a[1] = "World"// ORa := [2]string{"hello", "world"}// PHP$a = [    "hello",    "world"];
复制代码
Maps
  1. // Gom := map[string]string{    "first_name": "Foo",    "last_name": "Bar",}// PHP$m = [    "first_name" => "Foo",    "last_name" => "Bar"];
复制代码
工具范例

Go 不支持工具。可是,您可以利用 structs 实现 object 之类的语法。
  1. // Gopackage mainimport "fmt"type Person struct {    Name string    Address string}func main() {    person := Person{"Foo bar", "Sydney, Australia"}    fmt.Println(person.Name)}// PHP$person = new stdClass;$person->Name = "Foo bar";$person->Address = "Sydney, Australia";echo $person->Name;// 或利用范例转换$person = (object) [    'Name' => "Foo bar",    'Address' => "Sydney, Australia"];echo $person->Name;
复制代码
函数

Go 和 PHP 函数之间的重要区分是; Go 函数可以返回尽情数目标成果,而 PHP 函数只能返回一个成果。可是,PHP 可以经过返回数组来模仿不异的功用。
  1. // Gopackage mainimport "fmt"func fullname(firstName string, lastName string) (string) {    return firstName + " " + lastName}func main() {    name := fullname("Foo", "Bar")    fmt.Println(name)}// PHPfunction fullname(string $firstName, string $lastName) : string {    return $firstName . " " . $lastName;}$name = fullname("Foo", "Bar");echo $name;// 返回多个成果// Gopackage mainimport "fmt"func swap(x, y string) (string, string) {    return y, x}func main() {    a, b := swap("hello", "world")    fmt.Println(a, b)}// PHP// 返回一个数组以获很多个成果function swap(string $x, string $y): array {    return [$y, $x];}[$a, $b] = swap('hello', 'world');echo $a, $b;
复制代码
控制语句


If-Else
  1. // Gopackage mainimport (    "fmt")func compare(a int, b int) {    if a > b {        fmt.Println("a is bigger than b")    } else {        fmt.Println("a is NOT greater than b")    }}func main() {    compare(12, 10);}// PHPfunction compare(int $a, int $b) {    if ($a > $b) {        echo "a is bigger than b";    } else {        echo "a is NOT greater than b";    }}compare(12, 10);
复制代码
Switch

按照 Golang 官方教程文档:
Go 的 switch 与 C,C+,Java,JavaScript 和 PHP 中的类似,除了 Go 只运转选中的 case,而不是随后的全数 case。 现实上, break 语句在这些说话中的每个 case 后都是必须的,而在 Go 中则是自动补充的。另一个严重的区分是 Go 的 switch cases 不需如果常量,而且触及的值也不必是整数。
  1. // Gopackage mainimport (    "fmt"    "runtime")func main() {    fmt.Print("Go runs on ")    os := runtime.GOOS;    switch os {    case "darwin":        fmt.Println("OS X.")    case "linux":        fmt.Println("Linux.")    default:        fmt.Printf("%s.\n", os)    }}// PHPecho "PHP runs on ";switch (PHP_OS) {    case "darwin":        echo "OS X.";        break;    case "linux":        echo "Linux.";        break;    default:        echo PHP_OS;}
复制代码
For 循环
  1. // Gopackage mainimport "fmt"func main() {    sum := 0    for i := 0; i < 10; i++ {        sum += i    }    fmt.Println(sum)}// PHP$sum = 0;for ($i = 0; $i < 10; $i++) {    $sum += $i;}echo $sum;
复制代码
While 循环

Go 本身没有 while 循环的语法。响应的,Go 利用 for 循环取代实现 while 循环.
  1. // Gopackage mainimport "fmt"func main() {    sum := 1    for sum < 100 {        sum += sum    }    fmt.Println(sum)}// PHP$sum = 1;while ($sum < 100) {    $sum += $sum;}echo $sum;
复制代码
Foreach/Range

PHP 利用 foreach 迭代数组和工具。与之对应,Go 利用 range 迭代 slice 或 map。
  1. // Gopackage mainimport "fmt"func main() {    colours := []string{"Maroon", "Red", "Green", "Blue"}    for index, colour := range colours {        fmt.Printf("index: %d, colour: %s\n", index, colour)    }}// PHP$colours = ["Maroon", "Red", "Green", "Blue"];foreach($colours as $index => $colour) {    echo "index: {$index}, colour: {$colour}\n";}
复制代码
本日的内容就是这些。我尽管使文章篇幅较小且简洁。作为 PHP 斥地职员, 我尝试在练习 Go 时分享我的常识。也请随意分享你的想法。盼望你们喜畛啬读本篇文章。
八重樱:怎样从一位码农成为架构师的必看常识点:目录大全(不定期更新)zhuanlan.zhihu.com

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 淄博新闻网-淄博日报 淄博晚报 淄博财经新报 掌中淄博 淄博专业新闻资讯发布网站 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表