PHP 是一种动态类型语言,它使新手更容易编写代码。现在的问题是,PHP 开发人员能否从动态类型语言切换到像 Go 这样的静态类型语言?为了找到答案,让我们对比一下 Go 和 PHP 之间的语法差异。
Go 是由 Google 设计的一门静态类型的编译型语言。它有点类似于 C,但是它包含了更多的优点,比如垃圾回收、内存安全、结构类型和并发性。它的并发机制使多核和网络机器能够发挥最大的作用。这是 GoLang 的最佳卖点之一。此外,Go 速度快,表现力强,干净且高效。这也是 Go 如此吸引开发者学习的原因。
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 数据类型:
1 2 3 4 5 6 7 8 9 10 11 12
string bool intint8int16int32int64// Signed integer uintuint8uint16uint32uint64uintptr// Unsigned integers byte// alias for uint8 rune// alias for int32 float32float64 complex64complex128 array slices map struct
变量
Go 使用 var 声明全局变量和函数变量。但是,它也支持带有初始化程序的简写语法,但只能在函数内部使用。另一方面,PHP 仅支持带有初始化程序的变量声明。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// 变量声明 // Go // PHP var i int $i = 0// integer var f float64 $f = 0.0// float var b bool $b = false // boolean var s string $s = ""// string var a [2]string $a = [] // array
// 简短的变量声明 // Go // PHP i := 0$i = 0// integer f := 0.0$f = 0.0// float b := false $b = false // boolean s := ""$s = ""// string a := [1]string{"hello"} $a = [] // array
类型转换
Go
1 2 3
i := 42// Signed integer f := float64(i) // Float u := uint(f) // Unsigned integer
// Go package main import"fmt" type Person struct { Name string Address string } funcmain() { person := Person{"Foo bar", "Sydney, Australia"} fmt.Println(person.Name) }
package main import ( "fmt" ) funccompare(a int, b int) { if a > b { fmt.Println("a is bigger than b") } else { fmt.Println("a is NOT greater than b") } } funcmain() { compare(12, 10); }
PHP
1 2 3 4 5 6 7 8
functioncompare(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 不需要是常量,并且涉及的值也不必是整数。
Go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
package main import ( "fmt" "runtime" ) func main() { fmt.Print("Go runs on ")