作為一名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程式設計師未來之路一類的文章,但從未提出要去學習其他語言。
不要將自己圈在一個領域,不要做井底之蛙。
致謝感謝你看到這裡,希望本篇文章可以幫到你,謝謝。
歡迎關注 SegmentFault 微信公眾號 :)