PHP转Go系列 | ThinkPHP与Gin的使用姿势

大家好,我是码农先森。

安装

使用 composer 进行项目的创建。

composer create-project topthink/think thinkphp_demo

使用 go mod 初始化项目。

go mod init gin_demo

目录

thinkphp_demo 项目目录结构。

thinkphp_demo
├── LICENSE.txt
├── README.md
├── app
├── composer.json
├── composer.lock
├── config
├── extend
├── public
├── route
├── runtime
├── think
├── vendor
└── view

gin_demo 项目目录结构。

gin_demo/
├── app
│   ├── controller
│   └── model
├── config
├── go.mod
├── go.sum
├── main.go
├── route
│   └── app.go
└── view

路由

thinkphp_demo 项目的路由配置。

<?php
use think\facade\Route;

Route::get('/info/', 'index/info');
Route::post('/add/', 'index/add');
Route::post('/edit/', 'index/edit');
Route::post('/del/', 'index/del');

gin_demo 项目的路由配置。

package route

import (
	"gin_demo/app/controller"
	"github.com/gin-gonic/gin"
)

func InitRoute(r *gin.Engine) {
	r.GET("/info/", controller.InfoHandle())
	r.POST("/add/", controller.AddHandle())
	r.POST("/edit/", controller.EditHandle())
	r.POST("/del/", controller.DelHandle())
}

控制器

thinkphp_demo 项目的控制器。

<?php

namespace app\controller;

use app\BaseController;

class Index extends BaseController
{
    public function info() {
        // 这里从模型获取数据
        return;
    }

    public function add(){
        // 这里向模型添加数据
        return;
    }

    public function edit() {
        // 这里向模型编辑数据
        return;
    }

    public function del(){
        // 这里从模型删除数据
        return;
    }
}

gin_demo 项目的控制器。

package controller

import "github.com/gin-gonic/gin"

func InfoHandle() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 这里从模型获取数据
	}
}

func AddHandle() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 这里向模型添加数据
	}
}

func EditHandle() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 这里向模型编辑数据
	}
}

func DelHandle() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 这里从模型删除数据
	}
}

模型

thinkphp_demo 项目的模型。

<?php

namespace app\model;

use think\Model;

class User extends Model
{

}

gin_demo 项目的模型。

package model

type User struct {
	ID    int    `json:"id"`
	Name  string `json:"name"`
	Age   string `json:"age"`
	Phone string `json:"phone"`
}

// 设置表名
func (User) TableName() string {
	return "user"
}

总结

虽然语言和框架都不同,但是编程的思想都是一样,同样采用的是 MVC 的编程风格。从框架入手实现一个 CURD 案例,也可以很好的熟悉 Go 语言的编程风格及流程,为后续更深入的学习打下基础。

推荐

PHP 语言中的函数是如此强大、丰富、便利,PHP 程序员转到 Go 语言来,发现很多方法都需要自己封装,很不适应。因此给大家推荐一个很好网站,可以直接通过 PHP 语言中的函数找到对应在 Go 语言中的函数,这简直是转 Go 语言 PHP 程序员的福音,网站地址:https://www.php2golang.com/


欢迎关注、分享、点赞、收藏、在看,我是码农先森。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/731691.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】时钟树系统

1.时钟树简介 1.1五个时钟源 LSI是低速内部时钟&#xff0c;RC振荡器&#xff0c;频率为32kHz左右。供独立看门狗和自动唤醒单元使用。 LSE是低速外部时钟&#xff0c;接频率为32.768kHz的石英晶体。这个主要是RTC的时钟源。 HSE是高速外部时钟&#xff0c;可接石英*/陶瓷谐振…

Ubuntu 22.04安装 docker

安装过程和指令 # 1.升级 apt sudo apt update # 2.安装docker sudo apt install docker.io docker-compose # 3.将当前用户加入 docker组 sudo usermod -aG docker ${USER} # 4. 重启 # 5. 查看镜像 docker ps -a 或者 docker images # 6. 下载镜像 docker pull hello-world …

动态创建接口地址

和SpringBoot版本有关系 这里用的boot 2.2.2

嵌入式学习——数据结构(队列)——day49

1. 队列 1. 先进先出 2. 缓冲区——先进先出的队列 高速设备和低速设备利用缓冲区进行协调匹配 3. 串口数据的通信利用队列进行协调 4. 顺序队列——循环队列&#xff08;非重点&#xff09; 5. 链式队列 5.1 创建队列 5.2 入队 5.3 出队 5.4 清空队列 5.5 销毁指针 6.…

[FlareOn5]Ultimate Minesweeper

一切题目&#xff0c;可以运行的&#xff0c;首先就要自己运行一次 运行完毕你会发现这是个扫雷游戏 net dnspy打开 一般没有特别的 我们都是点这花括号 这有个getkey 一眼加加密 然后可以三个方向&#xff1a;动调&#xff0c;改文件&#xff0c;静态找数据写加密脚本 简…

Web渗透:XSS-DOM-based XSS

DOM-based XSS&#xff08;基于DOM的跨站脚本攻击&#xff09;是一种XSS攻击类型&#xff0c;其特点是恶意脚本通过操作文档对象模型&#xff08;DOM&#xff09;直接在客户端执行&#xff0c;而无需经过服务器的处理。这种攻击主要利用客户端JavaScript代码中的漏洞&#xff0…

C++入门超详细解释

C入门 文章目录 C入门框架命名空间 namespace &#xff08;不常用&#xff09;命名空间的使用方式&#xff08;三种&#xff09;using namespace std;\<iostream>coutendlcincout的使用命名冲突缺省参数&#xff08;省钱的省&#xff09;缺省参数分类全缺省参数半缺省参数…

使用阿里开源的Spring Cloud Alibaba AI开发第一个大模型应用

背景 前段时间看到Spring推出了SpringAI&#xff0c;可以方便快速的接入ChatGPT等国外的大模型&#xff0c;现在阿里巴巴也紧追脚步推出了Spring Cloud Alibaba AI&#xff0c;Spring Cloud Alibaba AI 目前基于 Spring AI 0.8.1 版本 API 完成通义系列大模型的接入。通义接入…

Golang | Leetcode Golang题解之第172题阶乘后的零

题目&#xff1a; 题解&#xff1a; func trailingZeroes(n int) (ans int) {for n > 0 {n / 5ans n}return }

Linux系统开机自启动脚本(案例:Raspberry Pi 4B脚本)

前言&#xff1a;本篇博客为手把手教学的 Linux 系统开机自启动脚本教程&#xff0c;且额外包含有 Raspberry Pi 4B 的开机自启动案例。日常工程项目中往往需要 Linux 系统能够自启动一些代码程序&#xff0c;本篇博客利用虚拟机下的 Ubuntu 自启动脚本来进行教学&#xff0c;且…

【PS】提取手写签名

准备工具&#xff1a; 纸张&#xff1a;用于承载签名&#xff1b; 笔&#xff1a;用于签名&#xff1b; 手机&#xff1a;用于拍摄签名&#xff1b; Adobe Photoshop 版本: 12.0.3 (12.0.3x20101211 [20101211.r.1222 2010/12/11:02:00:00 cutoff; r branch]) x32&#xff1a;用…

多路h265监控录放开发-(8)完成摄像机管理的修改和删除功能

xviewer.h public:XViewer(QWidget* parent Q_NULLPTR);//编辑摄像机void SetCam(int index);//121 public slots:void AddCam(); //新增摄像机配置120void SetCam(); //121void DelCam(); //121 private:Ui::XViewerClass ui;QMenu left_menu_; xviewer.cpp void XView…

React的State和setState

如何确地使用 State 不要直接修改 State.修改State应该使用 setState():构造函数是唯一可以给 this.state 赋值的地方 State 与 props 类似&#xff0c;但是 state 是私有的&#xff0c;并且完全受控于当前组件 我们可以在我们的自定义组件中添加私有的State jcode class C…

web-原生Ajax

概念: Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML。 作用: 数据交换:通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术&#xff0c;如…

Introduction to linear optimization 第 2 章课后题答案 11-15

线性规划导论 Introduction to linear optimization (Dimitris Bertsimas and John N. Tsitsiklis, Athena Scientific, 1997)&#xff0c; 这本书的课后题答案我整理成了一个 Jupyter book&#xff0c;发布在网址&#xff1a; https://robinchen121.github.io/manual-introdu…

Kafka第一篇——内部组件概念架构启动服务器zookeeper选举以及底层原理

目录 引入 ——为什么分布式系统需要用第三方软件&#xff1f; JMS 对比 组件 架构推演——备份实现安全可靠 &#xff0c; Zookeeper controller的选举 controller和broker底层通信原理 BROKER内部组件 ​编辑 topic创建 引入 ——为什么分布式系统需要用第三方软件&#…

游戏本地化以拓展海外市场

Logrus IT Korea的总监元庆燕&#xff08;KyoungYeon Won&#xff09;发表了一场关于“游戏本地化”的讲座&#xff0c;讲述了独立游戏开发者如何在梦想拓展海外市场的过程中&#xff0c;正确地本地化他们的游戏以满足国际市场的期望&#xff0c;以及实现这一重要任务的过程。 …

Java——包

一、包 1、简要介绍 在Java编程语言中&#xff0c;包&#xff08;Package&#xff09; 是一种用来组织和管理类&#xff08;Class&#xff09;和接口&#xff08;Interface&#xff09;的机制。包为开发者提供了一种逻辑分组的方式&#xff0c;使代码更加模块化、结构化和易于…

k8s部署wordpress及性能优化

镜像版本&#xff1a;wordpress mysql版本&#xff1a;mysql:8.0.27 部署wordpress&#xff1a;v1 此版本包含wordpress基础服务&#xff0c;可访问&#xff0c;但是一旦pod重新创建会丢失数据&#xff0c;文章中的图片等也会丢失&#xff0c;且只又一个pod&#xff0c;性能…

基于PSO粒子群优化的CNN-GRU的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络&#xff08;CNN&#xff09; 4.2 CNN-GRU模型架构 4.3 CNN-GRU结合PSO的时间序列预测 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软…