好久没写文章了,文笔有点生疏,这篇文章是工作中的一点总结。

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

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

数据类型

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

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

  • Go 与 PHP 相比没有对象。但是,Go 有一个类似于objectstruct类型。

PHP 数据类型:

booleanstringinteger // Signed integer, PHP does not support unsigned integers.float (also known as "floats", "doubles", or "real numbers")arrayobjectnullresource

Go 数据类型:

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仅支持带有初始化程序的变量声明。

// 变量声明// 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

类型转换

// 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"

数组

// Govar a [2]stringa[0] = "Hello"a[1] = "World"// ORa := [2]string{"hello", "world"}// PHP$a = ["hello","world"];

Maps

// Gom := map[string]string{"first_name": "Foo","last_name": "Bar",}// PHP$m = ["first_name" => "Foo","last_name" => "Bar"];

对象类型

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

// 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 可以通过返回数组来模拟相同的功能。

// 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

// 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不需要是常量,并且涉及的值也不必是整数。

// 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 循环

// 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 循环。

// 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。

// 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 时分享我的知识。也请随意分享你的想法。希望你们喜欢阅读本篇文章。

php foreach 循环 判断index 小于多少_Go 与 PHP 的语法对比相关推荐

  1. php foreach 循环 判断index 小于多少_PHP设计模式之迭代器模式 - 硬核项目经理

    一说到这个模式,就不得不提循环语句.在<大话设计模式>中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得.任何语言都有这种类似的语法可以方便 ...

  2. 采用数组实现斐波那契数列的计算、foreach循环的使用、100以内质数的判断

    想要实现斐波那契数列的计算,我们首先得了解斐波那契数列的定义及其原理: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称 ...

  3. 如何确定foreach循环中的第一次和最后一次迭代?

    问题很简单. 我的代码中有一个foreach循环: foreach($array as $element) {//code } 在这个循环中,我想在第一次或最后一次迭代时做出不同的反应. 这该怎么做? ...

  4. java foreach 跳过本次循环_【Java】对foreach循环的思考

    阿里java开发手册已经发表,很多都值得认真研究思考,看到零度的思考题,没忍住研究了一下. 在这里插入图片描述 首先,看一下给出的反例的执行结果. 如果是"1",最后list中的元 ...

  5. oracle for循环遍历数组,foreach循环

    Smarty foreach控制循环次数 1.在 smarty 中数组是经常会用到的,循环遍历数组用 section 或者 foreach ,如何得到数组长度或者判断一个数组个数呢?可以用{$arra ...

  6. 如何跳出forEach循环

    介绍 相信所有的前端小伙伴对 forEach() 方法并不陌生,它实现了对数组的每个元素执行一次给定的函数.可在使用中,经常希望跟 for 一样,在循环过程中,某个判断成立后跳出这个循环.本期我们就将 ...

  7. C# for循环与foreach循环

    一:for( )循环 通过下标,对循环中的代码反复执行,功能强大,可以通过index取得元素.在处理比较复杂的处理的时候较为方便. 注意: 1.初始化参数.更新循环变量可以写多个,用逗号隔开 2.变量 ...

  8. php循环如何中断,如何中断forEach循环(详细介绍)

    本篇文章给大家带来的内容是关于如何中断forEach循环(详细介绍),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在使用for循环的时候可以使用break 或者return语句来结 ...

  9. php if foreach个数记录,php foreach循环只返回数组中第一次迭代的值

    我似乎无法确定为什么我的foreach循环能够循环所有5个生成的ProductionOrderID,但只返回第一个ID的数据. 我的理解是数组正确循环,因为你可以在这里看到当前结果:https://i ...

最新文章

  1. python登录代码思路_用python登录Dr.com思路以及代码分享
  2. java测试不成功_为什么我的Java布尔测试总是失败?
  3. adb 测试工作中的总结
  4. QEMU KVM Libvirt手册(7): 硬件虚拟化
  5. leetcode 107. 二叉树的层次遍历 II(维护两个队列,通过异或运算切换)
  6. 计算机视觉招聘_INDEMIND|SLAM、计算机视觉、深度学习算法招聘(社招实习)
  7. xpath之string(.)方法
  8. InstallShield 2020
  9. Hadoop大数据简介
  10. 宝塔搭建javaweb_宝塔面板配置及部署javaweb教程(全网最全)
  11. 17.3 构建LinuxPC端QT软件上的ARM编译套件并进行测试
  12. 语义分割论文:Fully Convolutional Networks for Semantic Segmentation (CVPR2015)
  13. 佛祖保佑,永无bug,代码注释大全
  14. 自己的微信小程序学习笔记【1】——小程序开发工具的使用及项目文件说明
  15. 适合所有网站的前端优化技巧,值得你收藏!
  16. win7做服务器性能如何,win7如何做服务器配置
  17. 解决eclipse报错:错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)
  18. 无迹卡尔曼滤波(UKF)超详细解释
  19. mysql connector详解_MySQL Connector 编程
  20. MySQL 数据库基础(一)(数据库的简介)

热门文章

  1. jax-rs注解工作原理介绍
  2. ajax then jquery,使用Jquery.ajax()。then()时无法.catch()错误
  3. 朵朵糖故事机器人怎么更新_点播故事 |孙悟空三打白骨精
  4. ZooKeeper 典型的应用场景
  5. 用C语言设计光线成像程序——计算机达人成长之路(26)
  6. PHP 使网站进行跨域访问
  7. 如何将Netbeans配置更加合理
  8. rebuild myself rebuild my world
  9. VS2010 修改模板文件,增加默认注释
  10. Android应用程序启动过程源代码分析(5)