Linux安装Golang并访问数据库+部署到web

下载Golang

可以去官网看看,然后把链接复制一下,用wget下载
我刚发现Go官网打不开,可以先去这里看看,然后改一下版本号。

wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz

安装Golang

#解压
tar -zxvf go1.14.2.linux-amd64.tar.gz
#移动到/usr/local
mv go /usr/local
#切换目录
cd /usr/local/go

添加环境变量

echo "GOROOT=/usr/local/go" >> /etc/environment
#文件生效
source /etc/environment
#这个不用加好像可以
echo "PATH=$PATH:$GOROOT/bin" >> /etc/environment
#文件生效
source /etc/environment

创建工作空间

#创建工作空间
cd $HOME
mkdir -p go/src go/bin go/pkg

添加“工作空间”的环境变量

echo "GOPATH=$HOME/go" >> /etc/environment
#文件生效
source /etc/environment

其中,

  • bin:编译后可的执行文件的存放路径
  • pkg:编译包时,生成的.a文件的存放路径
  • src:源码路径,一般我们的工程就创建在src下面。

第一个Go程序

#创建工程目录
mkdir $HOME/go/src/hello
cd $HOME/go/src/hello
#创建一个go文件
vim hello.go

内容如下

package main
import "fmt"
func main() {
    fmt.Printf("hello world\n")
}

编译go

#编译go文件
go build

生成文件的名字,就是工程(上级目录)的名字

运行
./hello

即可看见输出
在这里插入图片描述

访问mysql数据库

如何搭建http服务

#下载驱动包
go get github.com/go-sql-driver/mysql

编写all.go访问数据库

//all.go
package main
import (
    "fmt"
    "net/http"
    "log"
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)
func all(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w,"<p>这个是nginx+Golang实现的页面</p>")
	//链接数据库
	db, err := sql.Open("mysql", "root:root@/database")
	if err != nil {
    		log.Fatal(err)
	}
	defer db.Close()
	//查询
	rows, err := db.Query("SELECT * FROM book")
	if err != nil {
    		log.Fatal(err)
	}
	defer rows.Close()
	//建立表头
	fmt.Fprintf(w,"<table border='1'><tr>")
	fmt.Fprintf(w,"<th>书号</th>")
	fmt.Fprintf(w,"<th>书名</th>")
	fmt.Fprintf(w,"<th>作者</th>")
	fmt.Fprintf(w,"<th>出版社</th>")
	fmt.Fprintf(w,"<th>价格</th>")
	fmt.Fprintf(w,"</tr>")
	//遍历结果集
	for rows.Next() {
    	var name int
		var title string
		var author string
		var publisher string
		var price float64
    		if err := rows.Scan(&name,&title,&author,&publisher,&price); err != nil {
        			log.Fatal(err)
    		}
   		fmt.Fprintf(w,"<tr>")
		fmt.Fprintf(w,"<td>%d</td>",name)
		fmt.Fprintf(w,"<td>%s</td>",title)
		fmt.Fprintf(w,"<td>%s</td>",author)
		fmt.Fprintf(w,"<td>%s</td>",publisher)
		fmt.Fprintf(w,"<td>%.2f</td>",price)
		fmt.Fprintf(w,"</tr>")
	}
	if err := rows.Err(); err != nil {
    		log.Fatal(err)
	}
}
func main() {
	//设置访问的路由
    http.HandleFunc("/all.go",all) 
    //设置监听的端口
    err := http.ListenAndServe(":9001", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

注:go的浮点数为float32或float64

设置后台运行go程序

在运行的时候可以在后面添加&,设置为后台运行

如,我的工程名是book
./book&
即可让其进入后台运行
jobs -l  可以查看后台运行的程序 
fg %n  可以唤回后台进行至前台,其中n为后台工作号

在这里插入图片描述
如图,可见go程序正在监听9001端口
浏览器访问ip/all.go

部署到nginx

利nginx的方向代理

nginx反向代理1
nginx反向代理2

修改nginx.conf配置文件

添加如下配置

location ~ \.go$ {
	proxy_set_header X-Forwarded-For $remote_addr;
	proxy_set_header Host            $http_host;
	proxy_pass   http://127.0.0.1:9001;
} 

使用nginx的反向代理,当用户访问.go文件的时候,跳转到访问到go监听的端口
nginx -s reload
浏览器访问ip:nginx监听的端口/all.go

注1:需要先启动go程序,让其监听9001端口
注2:nginx反向代理的时候,相当于访问http://127.0.0.1:9001/all.go,这时相当于把url传递给了go处理,这是需要注意HandleFunc监听的url pattern。

猜你喜欢

转载自blog.csdn.net/LittleSeedling/article/details/105893382