目录
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