PHP To Go 轉型手記 (終)

2021-12-25 SegmentFault思否
前言

作為一名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 微信公眾號 :)

相關焦點

  • 2021年最新大廠php+go面試題集(二)
    的關係,一個請求進來怎麼到php的 答:通過fastcgi協議,請求到nginx,通過fastcgi轉發到9000埠, php-fpm監聽9000埠,然後php程序處理 5.反轉鍊表怎麼反轉的?     (2)寫已經關閉的 chan 會 panic 6.go的並發模型    參考:https://segmentfault.com/a/1190000018150987    (1)多線程共享內存 ,java/c++等語言實現的就是這個    (2)CSP並發模型,go語言特有的,通過goroutine和channel來實現的    Go
  • PHP單元測試利器:PHPUNIT深入用法(二)
    【IT168 技術】在上一篇PHP單元測試利器:PHPUNIT初探文章中,我們對phpunit有了一個初步的認識,在本文中將繼續深入講解下phpunit中的一些用法。
  • PHP學習資料推薦(書籍篇)
    協議,python基礎,python爬蟲基礎,python數據分析基礎,hadoop原理,基礎,hbase基礎,goweb編程基礎,go並發編程基礎,openresty+lua編程基礎。     4,php方面:(1) PHP基礎主要是php官方手冊,著重了解下php7新特性,主要看notes,spl標準庫,pecl人跡罕至的地方,書籍推薦《php。web開發第四版》,基礎入門,《php應用程式安全編程》,講述安全編程的。另外多看配置文件,搞清楚,php配置,php-fpm配置的意思。
  • 快速轉型golang(go語言)web開發 01系列概覽
    因為現在go語言在國內實在是太火了……火,就意味著有錢途^_^(是的你沒看錯,就是你想的那個錢途)Go在國內到底有多火?現在市面上的大廠:華為、阿里巴巴、騰訊、百度、拼多多、京東、字節跳動、小米、美團、滴滴、360……已經沒有不用go語言的了……但是……go火爆速度遠大於市場上go工程師的供給速度,面對市面上大量go語言的崗位需求和明朗的就業前景,必定會有很多朋友有快速轉型的需求……而且……現在市面上好多go語言的視頻教程都是時長動不動就幾十個小時
  • php怎麼了,又要涼涼了嗎
    答案呼之即出,沒錯,是php,是php的敏捷開發讓這樣一個從此從創業過渡到了現在的大公司!三、php真的涼涼了嗎1、中小型公司的首選語言要說現在中小型公司的首選語言,我相信仍然是php,因為php的快速開發快速迭代早已深入人心。可能說到這裡,會有不少其他語言從業者來反駁博主。
  • 為什麼程式設計師都黑php? PHP中文網有話說!
    為什麼程式設計師都喜歡黑php?這個嘛!你罵一句php是垃圾試試,保準php程式設計師不揍扁你!這就好像自己的母校,縱然有很多不好的地方,但是只允許自己調侃,不允許外人罵半句。其實對於php開發人員來說,也一樣,大家就是沒事的時候把「PHP是世界上最好的語言」作為一個梗,調侃調侃,或者介紹自己是「拍黃片的」娛樂下自己。其實到現在為止我們還沒有看到真正程式設計師罵PHP,而那些黑php的人,都是那些不懂的人,或者一些其它語言的培訓機構故意高級黑。反過來,如果php經常被人黑,反而是好事!世界上只有兩種語言: 沒人用的和經常被人噴的。
  • PPython:PHP 擁抱 Python 的利器 | Linux 中國
    下載得到的文件中,以下三個是 PPython 的核心代碼,作用如下:◈ php_python.py,Python 進程主文件,完成 Python 端監聽請求並運行返回◈ process.py,Python 端核心類,實現 Python 內部進程調用及 PHP 與 Python 數據結構轉化等關鍵處理◈ php_python.php,PPython 客戶端,PHP 端引用此文件,
  • PHP基礎入門
    phpfunction php_cn(){    echo "好好學習";}php_cn();php_cn();?>在functions.php的同級目錄下,在創建一個user.php文件把functions.php文件包含進來.這樣函數信息就可以專門放在functions.php裡面,哪需要用到這些函數的時候,就從哪包含進來.
  • PHP程式設計師內功心法-常用工具
    (逃$ which php/home/shiguangqi/bin/php$ ll /home/shiguangqi/bin/phplrwxrwxrwx 1 shiguangqi shiguangqi 30 10月 25 12:09 /home/shiguangqi/bin/php -> /usr/local/php-7.2.14
  • WorldPress 使用教程-實現友情連結與go跳轉和url改造
    添加go頁面跳轉很多博客都會使用這樣的外部連結跳轉提示頁面,這樣做有利於seo,對搜尋引擎更加友好。下列代碼來自網絡:代碼請前往 linjianming.com 獲取 將上面代碼複製並保存為一個 index.php 文件丟到網站根目錄的 go 文件夾下。到此已經可以實現外鏈跳轉提示了。
  • 面試PHP一般會考查你哪些內容呢?不妨看看
    javascript不支持二維數組定義,可以用arr[0]= new array()來解決 4、假設a.html和b.html在同一個文件夾下面,用javascript實現當打開a.html5秒鐘後,自動跳轉到b.html<script>function go2b
  • php正則表達式基本知識與應用詳解
    php中主要模式如下表:修飾符說明i忽略大小寫m多文本模式s單行文本模式x忽略空白字符正則表達式在php中應用php中字符串匹配所謂的字符串匹配,言外之意就是判斷一個字符串中,是否包含或是等於另一個字符串
  • 作為多年 PHP 的開發者,在使用了 Go 語言之後……
    PHP的情況更為複雜,而go則將兩層管理放到了一起。最後一點想法這兩種語言有明顯的區別,在兩者之間做選擇非常容易。GoLang 的性能更好,擁有原生異步功能以及其他基本功能,非常適合需要頻繁使用的小型應用程式和微服務。
  • 服務端I/O性能大比拼:Node、PHP、Java與Go
    Apache為每個請求創建一個單獨的進程,通過一些優化來重用它們,以便最大程度地減少其需要執行的次數(創建進程相對來說較慢)。Apache調用PHP並告訴它在磁碟上運行相應的.php文件。PHP代碼執行並做一些阻塞的I/O調用。若在PHP中調用了file_get_contents(),那在背後它會觸發read()系統調用並等待結果返回。
  • (基礎篇) PHP需要它—PHP擴展庫
    在編輯php.ini文件時,應注意以下幾點。þ 需要修改extension_dir設置使其指向用戶放置擴展庫的目錄或者放置php_*.dll文件的位置。例如: extension_dir = C:\php\extensions þ  要在php.ini文件中啟用某擴展庫,需要去掉extension=php_*.dll前的注釋符號,即將需要加載的擴展庫前的分號「;」刪除。
  • 如果你是PHP開發者,請務必了解一下Composer
    這是一個視頻教程分享網,網站收集了php視頻教程,前端各種視頻教程,接口API,微信公眾號,支付寶視頻教程,還有go語言,python等視頻教程,教程以連結+提取碼的方式分享與大家!用公眾號每天來閱讀文章,學習,目前是最方便的。這是自閒暇的時間裡,利用5分鐘讀讀技術文章,豐富自己的知識。。。
  • PHP基礎教程(2):PHP安裝
    您不需要編譯任何軟體,或安裝額外的工具 - 只要在您的 web 目錄中創建.php 文件即可 - 然後您的伺服器會為您解析這些文件。大多數主機都提供對 PHP 的支持。不過,如果您的伺服器不支持 PHP,那麼您必須安裝 PHP。
  • PHP的新生命:PHP基金會宣布成立
    為了更快地開始運作,讓社區立即獲得基金會的益處,PHP社區決定委託 Open Collective 來執行:opencollective.com/phpfoundation。Open Collective 是一家處理法律和會計方面的基金會服務提供商。
  • 《最強蝸牛》魔法師的手記密令一覽 魔法師的手記密令是什麼
    導 讀 最強蝸牛中的魔法師的手記密令是在遊戲中比較特殊的一個密令,每一小夥伴都有一個不會重複的密令,那麼這個魔法師的手記密令到底是什麼呢
  • 【陳年舊文】PHP SECURITY CALENDAR2017 代碼審計(一)
    >功能分析通過GET方式獲取controllerName、data兩參數,而後判斷傳入的controllerName類是否存在,存在則實例化controllerName類並傳入data作為參數,而後執行該對象的render方法,若不存在則嘗試調用autoload去加載類,若類不存在則輸出提示字符串。漏洞點class_exists導致文件包含(line 8).