GoFrame 是一个开源的、高性能的 Web 开发框架,它是基于 Go 语言编写的,由国内开发者维护。GoFrame 提供了一套完整的解决方案,可以帮助开发者快速构建出高性能、高可用性的 Web 应用。GoFrame 的教程是专门为初学者准备的,旨在帮助初学者快速入门 GoFrame 框架,并使用它来开发 Web 应用。
GoFrame 教程包含了从安装到使用 GoFrame 的所有步骤,包括如何安装 GoFrame、如何使用 GoFrame 的核心功能、如何使用 GoFrame 的工具和库以及如何使用 GoFrame 创建 Web 应用等内容。教程中还会介绍一些有关 Go 语言的基本知识,以便初学者能够快速上手。
// 使用 go get 安装 goframe go get -u github.com/goframe/goframe // 使用 goframe 创建 web 项目 goframe new myproject // 运行 web 项目 cd myproject && goframe run
package main
import (
"github.com/gogf/gf/v2/os/gproc"
"fmt"
)
func main () {
r, err := gproc.ShellExec(`sleep 3s; echo "hello gf!";`)
fmt.Println("result:", r)
fmt.Println(err)
}
执行后,可以看到程序等待了3秒之后,输出结果为:
result: hello gf!
<nil>
由gproc.Manager
对象创建的进程都默认带子进程标识,在子进程程序中可以通过gproc.IsChild()
方法来判断自身是否为子进程。
package main
import (
"os"
"time"
"github.com/gogf/gf/v2/os/glog"
"github.com/gogf/gf/v2/os/gproc"
)
func main () {
if gproc.IsChild() {
glog.Printf("%d: Hi, I am child, waiting 3 seconds to die", gproc.Pid())
time.Sleep(time.Second)
glog.Printf("%d: 1", gproc.Pid())
time.Sleep(time.Second)
glog.Printf("%d: 2", gproc.Pid())
time.Sleep(time.Second)
glog.Printf("%d: 3", gproc.Pid())
} else {
m := gproc.NewManager()
p := m.NewProcess(os.Args[0], os.Args, os.Environ())
p.Start()
p.Wait()
glog.Printf("%d: child died", gproc.Pid())
}
}
执行后,终端打印结果如下:
2018-05-18 14:35:41.360 28285: Hi, I am child, waiting 3 seconds to die
2018-05-18 14:35:42.361 28285: 1
2018-05-18 14:35:43.361 28285: 2
2018-05-18 14:35:44.361 28285: 3
2018-05-18 14:35:44.362 28278: child died
gproc
除了能够创建子进程,管理子进程之外,也能管理非自身创建的其他进程。gproc
可以同时管理多个进程,这里以单个进程为例来演示对进程的管理功能。
gedit
软件(Linux下常用的文本编辑器)随意打开一个文件,在进程当中我们看到该gedit
的进程ID为28536 $ ps aux | grep gedit
john 28536 3.6 0.6 946208 56412 ? Sl 14:39 0:00 gedit /home/john/Documents/text
package main
import (
"fmt"
"github.com/gogf/gf/v2/os/gproc"
)
func main () {
pid := 28536
m := gproc.NewManager()
m.AddProcess(pid)
m.KillAll()
m.WaitAll()
fmt.Printf("%d was killedn", pid)
}
执行后,gedit
被关闭,终端输出信息为:
28536 was killed
我们可以通过RedirectTo/RedirectBack来实现页面之间的跳转,该功能通过LocationHeader实现。相关方法:func (r *Respon...
基本介绍http客户端支持对HTTP请求的输入与输出原始信息获取与打印,方便调试,相关方法如下:func (r *Response) Raw()...
Django中的默认错误视图应该足以满足大多数Web应用程序,但如果您需要任何自定义行为,可以轻松覆盖。在您的URLconf中指定如下所...