个人技术分享

  • 首页
  • 关于
  • 主题
  • 影视解析
  • 音乐
  • 归档
  • 留言
个人技术分享
  • 首页
  • 关于
  • 主题
  • 影视解析
  • 音乐
  • 归档
  • 留言
个人技术分享
刷新页面会随机【个人信息流样式】

28

文章

103

获赞

233

评论

8.2万+

浏览
世界那么大,我想去看看。但钱包那么小,哪也去不了。所以,珍惜当下,享受生活。
30岁 IP: 杭州 家里蹲大学
  • 首页
  • 关于
  • 主题
  • 影视解析
  • 音乐
  • 归档
  • 留言
hanhanjun888@163.com

个人技术分享

PHP To Go 转型手记

前言

作为一名PHP程序员,我感到荣幸。但在时代不断的变迁中,要具备足够的知识才可生存。 那就从Go语言学起把。 希望看到本篇文章的你可以对Go有一个基本的认识。本系列文章与我自己学习Go语言的方式去描述。以PHP代码与Go代码的对比加以区分理解。

变量

PHP
// 初始化变量
$domain = "www.hankin.cn";
// 批量赋值
$domain = $domain1 = $domain2 = "www.hankin.cn";
Go
// 初始化变量
var domain string = "www.hankin.cn"
// 批量赋值
var domain,domain1,domain2 string = "www.hankin.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 "www.hankin.cn";
// 格式化输出
printf("my blog %s","www.hankin.cn");
GO
// 基本输出
fmt.Println("www.hankin.cn")
// 格式化输出
fmt.Printf("my blog %s","www.hankin.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 City{}
GO
// 声明一个结构体 这里并非混淆公众,是因为Go本身没有类的概念,只是其声明及操作方法与类概念相似
type City struct{}

声明类

PHP
class User{}
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())

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

PHP(Laravel)
// 通过composer直接安装,简单易用
composer global require "laravel/installer"
// 创建一个项目
laravel new blog
GO(Beego)
// go自身就有包管理
go get github.com/astaxie/beego
// 创建项目也非常简单
bee api blog

目录结构

PHP(Laravel)
// laravel 的结构这里就不再阐述
| - app
| - bootstrap
| - config
| - database
| - public
| - resources
| - routes
| - storage
| - tests
| - vendor
GO(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

路由

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

模型 (Model)

PHP(Laravel)
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * 与模型关联的数据表。
     *
     * @var string
     */
    protected $table = 'user';
}
GO(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))
}

控制器

PHP(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)]);
    }
}
GO(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()
}
1年前 899浏览 0
赞 评论
评论(0)

暂无数据

取消回复

个人技术分享
刷新页面会随机【个人信息流样式】

28

文章

103

获赞

233

评论

8.2万+

浏览
世界那么大,我想去看看。但钱包那么小,哪也去不了。所以,珍惜当下,享受生活。
30岁 IP: 杭州 家里蹲大学
  • 首页
  • 关于
  • 主题
  • 影视解析
  • 音乐
  • 归档
  • 留言
  • php操作cookie字符串,替换对应值1年前
  • PHP To Go 转型手记1年前
  • 来个图2年前
  • “免费” 开通腾讯混元-元器 机器人 TOKEN真的有“一亿次”2年前
  • 一款wordpress主题 hankin3年前

免费开源主题:smarty_hankin v2.0重构版

wordpress版本:6.0+

PHP版本:7.0~8.0

gitee源码仓库地址:点击打开

github源码仓库地址:点击打开

最新源码地址:待更新

加QQ群入口:1018842166

WP开源主题 smarty_hankin

hankin 扫码关注公众号

最近评论


    Warning: Trying to access array offset on value of type null in /www/wwwroot/hankin.cn/wp-content/themes/hankin/inc/widget/widget-comments.php on line 32

    Warning: Trying to access array offset on value of type null in /www/wwwroot/hankin.cn/wp-content/themes/hankin/inc/widget/widget-comments.php on line 32
  • […] 平台主题名称介绍价格地址WPpix综合性最好的主题298DemoWPpink完成度高朋友圈499DemoWPhankin还在完善的主题noDemoTypicefox完成度高FreeDemoTypListen完成度高FreeDemoTypNabo小鸟风格FreeDemoTypzyyo三栏自适应现代时尚FreeDemoTypFlip仿pix主题noDemoTyppengyou单栏主题noDemoTypfriends单栏主题noDemoTyplan tyLAN程序TY版本39DemoHalopixpix授权移植主题169DemoZblogpyq单栏朋友圈noDemoZblogMoments轻社交朋友圈298DemoHugomoments单栏朋友圈noDemo程序lan程序有朋友圈外观99DemoDiscuz! 朋友圈式手机版Discuz!的纯手机版朋友圈98Demo […] 抠脚大汉的摆烂人生 发布于1年前

  • Warning: Trying to access array offset on value of type null in /www/wwwroot/hankin.cn/wp-content/themes/hankin/inc/widget/widget-comments.php on line 32

    Warning: Trying to access array offset on value of type null in /www/wwwroot/hankin.cn/wp-content/themes/hankin/inc/widget/widget-comments.php on line 32
  • […] Demo […] YanZi-朋友圈 发布于1年前
  • 请问一下,同款主题在哪里授权、下载?   发布于1年前
  • 真不错👍 唤( . )醒 发布于2年前
  • 确实挺不错的 断舍离 发布于2年前

扫码加QQ群:1018842166

微信打赏

支付宝打赏

友情链接: coder gzh DIYgod kam mango pix主题 wordpress 大学 wp2 主题喵 主题猫 元气秋刀鱼 创造狮 吾柯 大海看看 守望轩-宁静雅致的小轩馆 腾讯设计导航 若志奕鑫 风信子博客

hankin Powered by WordPress 浙ICP备20002401号-1