当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP 与 Go 的语法区别

发布:smiling 来源: PHP粉丝网  添加日期:2022-06-17 10:01:28 浏览: 评论:0 

Go 是由 Google 设计的一门静态类型的编译型语言。它有点类似于 C,但是它包含了更多的优点,比如垃圾回收、内存安全、结构类型和并发性。它的并发机制使多核和网络机器能够发挥最大的作用。这是 GoLang 的最佳卖点之一。此外,Go 速度快,表现力强,干净且高效。这也是 Go 如此吸引开发者学习的原因。

PHP 是一种动态类型语言,它使新手更容易编写代码。现在的问题是,PHP 开发人员能否从动态类型语言切换到像 Go 这样的静态类型语言?为了找到答案,让我们对比一下 Go 和 PHP 之间的语法差异。

数据类型

Go 同时支持有符号和无符号整数,而 PHP 只支持有符号整数。

另一个主要区别是数组。Go 对 array 和 map 有单独的类型,而 PHP 数组实际上是有序的 map。

Go 与 PHP 相比没有对象。但是,Go 有一个类似于 object 的 struct 类型。

PHP 数据类型:

boolean

string

integer // Signed integer, PHP does not support unsigned integers.

float (also known as "floats", "doubles", or "real numbers")

array

object

null

resource

Go 数据类型:

string

bool

int  int8  int16  int32  int64 // Signed integer

uint uint8 uint16 uint32 uint64 uintptr // Unsigned integers

byte // alias for uint8

rune // alias for int32

float32 float64

complex64 complex128

array

slices

map

struct

变量

Go 使用 var 声明全局变量和函数变量。但是,它也支持带有初始化程序的简写语法,但只能在函数内部使用。另一方面,PHP 仅支持带有初始化程序的变量声明。

  1. // 变量声明 
  2.  
  3. // Go               // PHP 
  4.  
  5. var i int           $i = 0      // integer 
  6.  
  7. var f float64       $f = 0.0    // float 
  8.  
  9. var b bool          $b = false  // boolean 
  10.  
  11. var s string        $s = ""     // string 
  12.  
  13. var a [2]string     $a = []     // array 
  14.  
  15. // 简短的变量声明 
  16.  
  17. // Go                      // PHP 
  18.  
  19. i := 0                     $i = 0      // integer 
  20.  
  21. f := 0.0                   $f = 0.0    // float 
  22.  
  23. b := false                 $b = false  // boolean 
  24.  
  25. s := ""                    $s = ""     // string 
  26.  
  27. a := [1]string{"hello"}    $a = []     // array 

类型转换

  1. // Go 
  2.  
  3. i := 42             // Signed integer 
  4.  
  5. f := float64(i)     // Float 
  6.  
  7. u := uint(f)        // Unsigned integer 
  8.  
  9. // PHP 
  10.  
  11. $i = 1; 
  12.  
  13. $f = (float) $i;    // 1.0 
  14.  
  15. $b = (bool) $f      // true 
  16.  
  17. $s = (string) $b    // "1" 

数组

  1. // Go 
  2.  
  3. var a [2]string 
  4.  
  5. a[0] = "Hello" 
  6.  
  7. a[1] = "World" 
  8.  
  9. // OR 
  10.  
  11. a := [2]string{"hello", "world"} 
  12.  
  13. // PHP 
  14.  
  15. $a = [ 
  16.  
  17.     "hello", 
  18.  
  19.     "world" 
  20.  
  21. ]; 
  22.  
  23. Maps 
  24.  
  25. // Go 
  26.  
  27. m := map[string]string{ 
  28.  
  29.     "first_name": "Foo", 
  30.  
  31.     "last_name": "Bar", 
  32.  
  33. } 
  34.  
  35. // PHP 
  36.  
  37. $m = [ 
  38.  
  39.     "first_name" => "Foo", 
  40.  
  41.     "last_name" => "Bar" 
  42.  
  43. ]; 

对象类型

Go 不支持对象。但是,您可以使用 structs 实现 object 之类的语法。

  1. // Go 
  2.  
  3. package main 
  4.  
  5. import "fmt" 
  6.  
  7. type Person struct { 
  8.  
  9.     Name string 
  10.  
  11.     Address string 
  12.  
  13. } 
  14.  
  15. func main() { 
  16.  
  17.     person := Person{"Foo bar", "Sydney, Australia"} 
  18.  
  19.     fmt.Println(person.Name) 
  20.  
  21. } 
  22.  
  23. // PHP 
  24.  
  25. $person = new stdClass; 
  26.  
  27. $person->Name = "Foo bar"; 
  28.  
  29. $person->Address = "Sydney, Australia"; 
  30.  
  31. echo $person->Name; 
  32.  
  33. // 或使用类型转换 
  34.  
  35. $person = (object) [ 
  36.  
  37.     'Name' => "Foo bar", 
  38.  
  39.     'Address' => "Sydney, Australia" 
  40.  
  41. ]; 
  42.  
  43. echo $person->Name; 

函数

Go 和 PHP 函数之间的主要区别是; Go 函数可以返回任意数量的结果,而 PHP 函数只能返回一个结果。但是,PHP 可以通过返回数组来模拟相同的功能。

  1. // Go 
  2.  
  3. package main 
  4.  
  5. import "fmt" 
  6.  
  7. func fullname(firstName string, lastName string) (string) { 
  8.  
  9.     return firstName + " " + lastName 
  10.  
  11. } 
  12.  
  13. func main() { 
  14.  
  15.     name := fullname("Foo", "Bar") 
  16.  
  17.     fmt.Println(name) 
  18.  
  19. } 
  20.  
  21. // PHP 
  22.  
  23. function fullname(string $firstName, string $lastName) : string { 
  24.  
  25.     return $firstName . " " . $lastName; 
  26.  
  27. } 
  28.  
  29. $name = fullname("Foo", "Bar"); 
  30.  
  31. echo $name; 
  32.  
  33. // 返回多个结果 
  34.  
  35. // Go 
  36.  
  37. package main 
  38.  
  39. import "fmt" 
  40.  
  41. func swap(x, y string) (string, string) { 
  42.  
  43.     return y, x 
  44.  
  45. } 
  46.  
  47. func main() { 
  48.  
  49.     a, b := swap("hello", "world") 
  50.  
  51.     fmt.Println(a, b) 
  52.  
  53. } 
  54.  
  55. // PHP 
  56.  
  57. // 返回一个数组以获得多个结果 
  58.  
  59. function swap(string $x, string $y): array { 
  60.  
  61.     return [$y, $x]; 
  62.  
  63. } 
  64.  
  65. [$a, $b] = swap('hello', 'world'); 
  66.  
  67. echo $a, $b; 

控制语句

If-Else

  1. // Go 
  2.  
  3. package main 
  4.  
  5. import ( 
  6.  
  7.     "fmt" 
  8.  
  9. ) 
  10.  
  11. func compare(a int, b int) { 
  12.  
  13.     if a > b { 
  14.  
  15.         fmt.Println("a is bigger than b") 
  16.  
  17.     } else { 
  18.  
  19.         fmt.Println("a is NOT greater than b") 
  20.  
  21.     } 
  22.  
  23. } 
  24.  
  25. func main() { 
  26.  
  27.     compare(12, 10); 
  28.  
  29. } 
  30.  
  31. // PHP 
  32.  
  33. function compare(int $a, int $b) { 
  34.  
  35.     if ($a > $b) { 
  36.  
  37.         echo "a is bigger than b"; 
  38.  
  39.     } else { 
  40.  
  41.         echo "a is NOT greater than b"; 
  42.  
  43.     } 
  44.  
  45. } 
  46.  
  47. compare(12, 10); 
  48.  
  49. Switch 

根据 Golang 官方教程文档:

Go 的 switch 与 C,C+,Java,JavaScript 和 PHP 中的类似,除了 Go 只运行选中的 case,而不是随后的所有 case。 实际上, break 语句在这些语言中的每个 case 后都是必需的,而在 Go 中则是自动补充的。另一个重要的区别是 Go 的 switch cases 不需要是常量,并且涉及的值也不必是整数。

  1. // Go 
  2.  
  3. package main 
  4.  
  5. import ( 
  6.  
  7.     "fmt" 
  8.  
  9.     "runtime" 
  10.  
  11. ) 
  12.  
  13. func main() { 
  14.  
  15.     fmt.Print("Go runs on ") 
  16.  
  17.     os := runtime.GOOS; 
  18.  
  19.     switch os { 
  20.  
  21.     case "darwin": 
  22.  
  23.         fmt.Println("OS X.") 
  24.  
  25.     case "linux": 
  26.  
  27.         fmt.Println("Linux.") 
  28.  
  29.     default: 
  30.  
  31.         fmt.Printf("%s.\n", os) 
  32.  
  33.     } 
  34.  
  35. } 
  36.  
  37. // PHP 
  38.  
  39. echo "PHP runs on "; 
  40.  
  41. switch (PHP_OS) { 
  42.  
  43.     case "darwin": 
  44.  
  45.         echo "OS X."; 
  46.  
  47.         break; 
  48.  
  49.     case "linux": 
  50.  
  51.         echo "Linux."; 
  52.  
  53.         break; 
  54.  
  55.     default: 
  56.  
  57.         echo PHP_OS; 
  58.  
  59. } 
  60.  
  61. For 循环 
  62.  
  63. // Go 
  64.  
  65. package main 
  66.  
  67. import "fmt" 
  68.  
  69. func main() { 
  70.  
  71.     sum := 0 
  72.  
  73.     for i := 0; i < 10; i++ { 
  74.  
  75.         sum += i 
  76.  
  77.     } 
  78.  
  79.     fmt.Println(sum) 
  80.  
  81. } 
  82.  
  83. // PHP 
  84.  
  85. $sum = 0; 
  86.  
  87. for ($i = 0; $i < 10; $i++) { 
  88.  
  89.     $sum += $i; 
  90.  
  91. } 
  92.  
  93. echo $sum; 

While 循环

Go 自身没有 while 循环的语法。相应的,Go 使用 for 循环代替实现 while 循环.

  1. // Go 
  2.  
  3. package main 
  4.  
  5. import "fmt" 
  6.  
  7. func main() { 
  8.  
  9.     sum := 1 
  10.  
  11.     for sum < 100 { 
  12.  
  13.         sum += sum 
  14.  
  15.     } 
  16.  
  17.     fmt.Println(sum) 
  18.  
  19. } 
  20.  
  21. // PHP 
  22.  
  23. $sum = 1; 
  24.  
  25. while ($sum < 100) { 
  26.  
  27.     $sum += $sum; 
  28.  
  29. } 
  30.  
  31. echo $sum; 
  32.  
  33. Foreach/Range 

PHP 使用 foreach 迭代数组和对象。与之对应,Go 使用 range 迭代 slice 或 map。

  1. // Go 
  2.  
  3. package main 
  4.  
  5. import "fmt" 
  6.  
  7. func main() { 
  8.  
  9.     colours := []string{"Maroon", "Red", "Green", "Blue"} 
  10.  
  11.     for index, colour := range colours { 
  12.  
  13.         fmt.Printf("index: %d, colour: %s\n", index, colour) 
  14.  
  15.     } 
  16.  
  17. } 
  18.  
  19. // PHP 
  20.  
  21. $colours = ["Maroon", "Red", "Green", "Blue"]; 
  22.  
  23. foreach($colours as $index => $colour) { 
  24.  
  25.     echo "index: {$index}, colour: {$colour}\n"; 
  26.  
  27. } 

今天的内容就是这些。我尽量使文章篇幅较小且简洁。作为 PHP 开发人员, 我尝试在练习 Go 时分享我的知识。也请随意分享你的想法。希望你们喜欢阅读本篇文章。

Tags: PHP语法 Go语法

分享到:

相关文章