PHP和go语法差异

变量

PHP

// 初始化变量
$domain = "blog.fastrun.cn";
// 批量赋值
$domain = $domain1 = $domain2 = "blog.fastrun.cn";

go

// 初始化变量
var domain string = "blog.fastrun.cn"
// 批量赋值
var domain,domain1,domain2 string = "blog.fastrun.cn"
// 批量声明赋值
var username,age,local = "zhangsan",13,"BeiJing"
var(
	username="zhangsan"
	age = 13
	local = "BeiJing常量"
)

常量

php

define("FOO","something");

go

// 单独声明
const FOO [string]= something
// 批量声明
const (
	USERNAME = "zhangsan"
	AGE      = 30
)

打印

php

// 基本输出
echo "blog.fastrun.cn";
// 格式化输出
printf("my blog %s","blog.fastrun.cn");

go

// 基本输出
fmt.Println("blog.fastrun.cn")
// 格式化输出
fmt.Printf("my blog %s","blog.fastrun.cn")

函数

php

// 基本声明
function printString(string $string){
	echo $string;
}
// 带返回值
function printString(string $string) : string{
	return $string;
}

go

// 基本声明
func printString(s string){
	fmt.Println(s)
}
// 带返回值
func printString(s string) string{
	return s
}

加载

php

namespace Action
use Action

go

package Action
import "action"

数组

php

// 初始化
$arr = []
$arr = array()
// 初始化赋值
$arr = [1,2,3]
// 多维数组
$arr = [][]
// 获取值
echo $arr[1]
// 获取数组总数
echo length($arr)
// 获取数组区间
$a=array("red","green","blue","yellow","brown");
print_r(array_slice($a,1,2));
// 设置key=>value
$arr = ["username"=>"zhangsan","age"=>13]
// 删除指定下标
unset($arr[0])

go 数组 & 切片 (切片是数组的一个View,就例如MySQL的视图一样)

// 初始化
var arr [5]int
// 初始化赋值
arr := [5]int{1, 2, 3, 4, 5}
// 无需声明数组个数
arr := [...]int{1, 2, 3, 4, 5, 6, 7}
// 多维数组
var arr [4][5]bool
// 获取值
fmt.Println(arr[1])
// 获取数组总数
fmt.Println(len(arr))
// 获取数组区间 显而易见,Go对数组的操作更便利直观
a := [...]string{"red","green","blue","yellow","brown"}
fmt.Println(a[1:2])
// 设置key=>value 这里需要使用Map
m := map[string]string{
	"username": "zhangsan",
	"age" : "13"
}
// 删除指定下标 Go没有删除数组下标的系统方法
arr := arr[1:]
// 删除中间位置的下标 可通过合并的方式去除指定下标
arr := append(arr[:3],arr[4:])

循环结构

php

// 基本结构
for($i=0;$i<10;$i++){
	echo $i;
}
// 死循环
for($i=0;$i<10;$i++){
	echo $i;
	$i--
}
// 获取key,value
foreach($arr as $key=>$value){
	echo $key,$value
}

go

// 基本结构
for i := 0; i < 10; i++ {
	fmt.Println(i)
}
// 死循环 可见Go写死循环非常方便
for {
	fmt.Println("")
}
// 获取key,value
for k, v := range arr {
	fmt.Println(k, v)
}

控制结构

php

// if
if(true){

}
// switch
switch(true){
	case true:
		echo true;
		break;
}

go

// if
if true {

}
// switch Go语言的Switch的Case不需要break
switch true {
	case true:
		fmt.Println(true)
}

php

// 声明一个类
class User{}

go

// 声明一个结构体 这里并非混淆公众,是因为Go本身没有类的概念,只是其声明及操作方法与类概念相似
type User struct{}

成员变量

php

class User{
	public $name;
	public $age;
}

go

type User struct {
	username string
	age      int
}

变量修饰

php

class User{
	public $name;
	private $age;
}

go

// 没有看错,Go中没有保护(protected),变量名首字母大写为public,小写为private
type User struct {
	Username string
	Age      int
}

成员方法

php

class User{
	public $name;
	public $age;

	function setName(){

	}

	function getName(){

	}
}

go

type User struct {
	username string
	age      int
}

func (u User) setName(name string) bool {
	u.username = name

	return true
}

func (u User) getName() string {
	return u.username
}

初始化

php

// php 没有构造方法的话,新建对象无需传参数
new User();

go

// go 内结构体声明的变量是可选参数,既可传可不传,go既没有类概念,所以也没有构造方法。
User{"zhangsan",15}

使用

php

$user = new User();
$user->getName();

go

u := User{"zhangsan",15}
fmt.Println(u.getName())

转自 M先生博客http://maizhijian.com

会飞的鱼博客
请先登录后发表评论
  • latest comments
  • 总共0条评论