PHP To Go 轉型手記 (終)

clipboard.png

前言

做爲一名PHP程序員,我感到榮幸。但在時代不斷的變遷中,要具有足夠的知識才可生存。php

那就從Go語言學起把。laravel

但願看到本篇文章的你能夠對Go有一個基本的認識。本系列文章與我本身學習Go語言的方式去描述。以PHP代碼與Go代碼的對比加以區分理解。git

這是轉型手記的最後一章,在往下沒辦法再去寫了,須要詳細的看書去了解。本章以實戰方式來對比如下PHP與Golang的寫法。程序員

這裏使用Laravel與Beego(基於Go開發的MVC框架)來演示github

安裝

Laraveljson

// 經過composer直接安裝,簡單易用
composer global require "laravel/installer"
// 建立一個項目
laravel new blog

Beegobootstrap

// go自身就有包管理
go get github.com/astaxie/beego
// 建立項目也很是簡單
bee api blog

目錄結構

Laravelapi

// laravel 的結構這裏就再也不闡述
| - app
| - bootstrap
| - config
| - database
| - public
| - resources
| - routes
| - storage
| - tests
| - vendor

Beegomvc

// 顯而易見,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

路由

Laravelapp

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程序員將來之路一類的文章,但從未提出要去學習其餘語言。

不要將本身圈在一個領域,不要作井底之蛙。

致謝

感謝你看到這裏,但願本篇文章能夠幫到你。謝謝

相關文章
相關標籤/搜索