Linux下安装Go并访问数据库且公网访问

目录

 

1、下载Golang

 2、访问数据库

3、设置后台运行go程序

4、设置开机自启动


1、下载Golang

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

如果需要其他版本可以自行上官网找,然后改掉版本号。

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

添加环境变量

vim /etc/profile

添加内容

GOROOT=/usr/local/go
PATH=$PATH:$GOROOT/bin

更新文件

source /etc/profile

创建工作空间

#创建工作空间
cd $HOME
#先创建go目录,并在go目录下创建三个文件夹
mkdir -p go/src go/bin go/pkg

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

vi /etc/profile

 添加内容

GOPATH=$HOME/go

更新文件

source /etc/profile

其中,

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

 查看go版本命令

go version

 2、访问数据库

下载驱动包

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

 如果出现下面这个提示

go: missing Git command. See https://golang.org/s/gogetcmd

package github.com/Go-SQL-Driver/MySQL: exec: "git": executable file not found in %PATH%

 可能是没有安装git

#查看有没有安装
git --version

没出现版本号表示没安装,具体安装过程可以参考这个链接:Linux下安装Git

安装成功后,重新下载mysql的驱动包,成功后在src目录下会出现个github.com的文件夹

在该文件夹下创建mysqlTest文件夹

mkdir mysqlTest
cd mysqlTest
#创建go文件
vim mysqlTest.go

 在文件内添加内容

//mysqlTest.go
package main
import (
    "fmt"
    "net/http"
    "log"
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)
func mysqlTest(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("content-type", "text/html;charset=utf-8")
        fmt.Fprintf(w,"<h2>这个是Golang实现的页面</h2>\n")
        //链接数据库,root为帐号,123456为密码,user为数据库
        db, err := sql.Open("mysql", "root:123456@/user")
        if err != nil {
                log.Fatal(err)
        }
        defer db.Close()
        //查询
        rows, err := db.Query("SELECT * FROM student")
        if err != nil {
                log.Fatal(err)
        }
        defer rows.Close()
        //遍历结果集
        for rows.Next() {
                var ID int
                var name string
                var number string
                //这里根据你的数据库里有多少字段来写
                if err := rows.Scan(&ID,&number,&name); err != nil {
                                log.Fatal(err)
                }
                fmt.Fprintf(w,"<h2>这是我的number:%s</h2>\n",number)
                fmt.Fprintf(w,"<h2>这是我的name:%s</h2>\n",name)
        }
        if err := rows.Err(); err != nil {
                log.Fatal(err)
        }
}
func main() {
        //设置访问的路由
    http.HandleFunc("/mysqlTest.go",mysqlTest) 
    //设置监听的端口
    err := http.ListenAndServe(":9001", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

然后编译

#如果在当前目录下只有一个go文件,就直接下面这个命令
go build
#否则执行下面命令
go build mysqlTest.go

 然后就会出现一个同名的可执行文件

更新:在执行前,需要先将服务器上面的安全组里添加上9001端口,否则就会出现不能访问端口的问题了。不同服务器开放端口的方法略微有点差别,具体怎么开大家自行百度把。

执行

./mysqlTest

 然后就可以公网ip:9001/mysqlTest.go访问了

 如果出现类似下面这个错误,则应该是你的go文件里那个rows.scan的参数不对,自己研究一下改掉就ok了,像我数据库里有三个字段,而一开始我只写了两个字段,所以就出现了这个问题

2020/06/17 11:13:26 sql: expected 3 destination arguments in Scan, not 2
 

3、设置后台运行go程序

使用nohup命令

#command 就是你要执行的命令,2>/dev/null是将一些提示信息扔到/dev/null,这个文件相当于垃圾箱
nohup command 2>/dev/null &
#将go放在后台执行(在mysqlTest目录下执行)
nohup ./mysqlTest 2>/dev/null &
#如果不在mysqlTest目录下执行,则用绝对路径
nohup /root/go/src/mysqlTest/mysqlTest 2>/dev/null &
#可以查看后台运行的程序 
jobs -l
#可以唤回后台进行至前台,其中n为后台工作号
fg %n

然后公网ip:9001/mysqlTest.go访问测试

4、设置开机自启动

如果看过我上一篇云服务器Linux安装Nodejs,并实现连接数据库且公网访问,有在最后在/etc/init.d下创建forever文件的,就直接在那个/etc/init.d/forever文件末尾添加以下内容:

nohup /root/go/src/mysqlTest/mysqlTest 2>/dev/null &

然后重启服务器测试一下就行了。

 如果没有,就在/etc/init.d目录下创建一个文件,我这里命名为goStart

vim goStart

添加内容

#!/bin/bash
# chkconfig: 354 88 08
# description: Forever for Node.js
# 上面这段解释代码必须要,否则你添加到chkconfig会提示错误:service X does not support chkconfig
#下面的路径根据自己的改
nohup /root/go/src/mysqlTest/mysqlTest 2>/dev/null &

 然后就修改文件权限,将这个文件添加到系统中开机启动

# 第一步:下面755这一步是别的文章介绍的,不知道用不用,不过加上也无所谓,所以我也一并执行了
chmod a+x goStart
chmod 755 /etc/init.d/goStart
 
# 第二步:把goStart添加到系统服务器上开机启动
chkconfig --add /etc/init.d/goStart
 
# 第三步:启动,开启goStart服务
chkconfig goStart on 
 
#第四步:查看服务
chkconfig --list

最后重启服务器测试一下,就ok了

参考链接:https://blog.csdn.net/LittleSeedling/article/details/105893382

猜你喜欢

转载自blog.csdn.net/hmq1350167649/article/details/106803836