PHP To Go 转型手记 (终)

栏目: PHP · 发布时间: 5年前

内容简介:作为一名PHP程序员,我感到荣幸。但在时代不断的变迁中,要具备足够的知识才可生存。那就从Go语言学起把。

PHP To Go 转型手记 (终)

前言

作为一名 PHP 程序员,我感到荣幸。但在时代不断的变迁中,要具备足够的知识才可生存。

那就从 Go 语言学起把。

希望看到本篇文章的你可以对Go有一个基本的认识。本系列文章与我自己学习Go语言的方式去描述。以PHP代码与Go代码的对比加以区分理解。

这是转型手记的最后一章,在往下没办法再去写了,需要详细的看书去了解。本章以实战方式来对比以下PHP与Golang的写法。

这里使用 Laravel 与Beego(基于Go开发的MVC框架)来演示

安装

Laravel

// 通过composer直接安装,简单易用
composer global require "laravel/installer"
// 创建一个项目
laravel new blog

Beego

// go自身就有包管理
go get github.com/astaxie/beego
// 创建项目也非常简单
bee api blog

目录结构

Laravel

// laravel 的结构这里就不再阐述
| - app
| - bootstrap
| - config
| - database
| - public
| - resources
| - routes
| - storage
| - tests
| - vendor

Beego

// 显而易见,beego并没有laravel那样过度设计(虽然过度设计并非指目录,
// 但以看目录就知道beego真的没有太多东西)
blog
├── conf
│   └── app.conf
├── controllers
│   └── object.go
│   └── user.go
├── docs
│   └── doc.go
├── main.go
├── models
│   └── object.go
│   └── user.go
├── routers
│   └── router.go
└── tests
    └── default_test.go

路由

Laravel

Route::get('/user', 'UserController@index');

Beego

// 与laravel的使用方式差不多
// 这里为了统一,路由直接绑定控制器方法只有下列这种
// beego 还提供了注解方式 , 详情见 https://beego.me/docs/mvc/controller/router.md
beego.Router("/user",&UserController{},"get:index")

模型 (Model)

Laravel

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * 与模型关联的数据表。
     *
     * @var string
     */
    protected $table = 'user';
}

Beego

// Beego通过结构体名称作为表名,并且orm操作的所有字段都必须提前声明
package models

import (
    "github.com/astaxie/beego/orm"
)
type User struct {
    Id       int    `json:"id"`
    Tel      string `json:"tel"`
    Password string `json:"password"`
    Status   string `json:"status"`
}

func init() {
    orm.RegisterModel(new(User))
}

控制器

Laravel

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 显示给定用户的概要文件
     *
     * @param  int  $id
     * @return Response
     */
    public function index($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}

Beego

package controllers

import (
    "github.com/astaxie/beego"
    "github.com/astaxie/beego/orm"
)

// 这里相当于继承了父类 beegoController
type MemberController struct {
    beego.Controller
}


func (c *CityController) Index() {
    var results []orm.Params

    orm.NewOrm().QueryTable("member").
        Values(&results)

    c.Data["json"] = results
    c.ServeJSON()
}

总结

学Go有1个多月的时间了。写这类的文章也遭到了很多质疑,作为一个手记去发布仅仅为了让想去学习其他语言的朋友了对新语言的一个认识,不是去对比其不同。而找其语法相似点。

语言只是工具,希望各位PHP工程师不要仅限于去使用PHP,这一年看到很多写PHP程序员未来之路一类的文章,但从未提出要去学习其他语言。

不要将自己圈在一个领域,不要做井底之蛙。

致谢

感谢你看到这里,希望本篇文章可以帮到你。谢谢


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Orange'S:一个操作系统的实现

Orange'S:一个操作系统的实现

于渊 / 电子工业出版社 / 2009-6 / 69.00元

《Orange S:一个操作系统的实现》从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。书中不仅关注代码本身,同时关注完成这些代码的思路和过程。本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不......一起来看看 《Orange'S:一个操作系统的实现》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具