go的web开发
go的环境搭建
下载编译器(略)
配置环境变量
① 是项目文件存放路径
②编译器路径,配置好GOROOT后path环境变量中加入%GOROOT%\bin
若成功
进入GOPATH目录创建项目
为了能在国内网络环境下正常的安装go开发工具包,你需要做如下的操作,打开cmd,执行2条命令:go env -w GO111MODULE=on
若出现以上错误,执行以下命令:
go env -w GOPROXY=https://goproxy.cn,direct
package main
import (
"html/template"
"log"
"net/http"
)
// 定义"/hello" 请求处理函数
func helloHandler(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("启航,go"))
method := request.Method
println(method)
url := request.URL
values := url.Query()
username := values.Get("userN")
password := values.Get("passW")
println(username, password)
}
// 定义"/world" 请求处理器函数
func worldHandler(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("go web world"))
// 获取请求方式
method := request.Method
println("请求方式", method)
if request.Method == "GET" {
t, _ := template.ParseFiles("login.html")
t.Execute(writer, nil)
} else {
// 解析post url 参数
url := request.URL
values := url.Query()
userName := values.Get("userName")
password := values.Get("password")
println(userName, password)
// 解析表单参数
request.ParseForm()
userName1 := request.Form.Get("userName1")
password1 := request.Form.Get("password1")
println(userName1, password1)
}
}
func main() {
//为""/hello" 路由绑定处理器函数
http.HandleFunc("/hello", helloHandler)
// 为"/world"路由绑定处理器函数
http.HandleFunc("/login", worldHandler)
//启动服务并监听8090端口
//err := http.ListenAndServe("localhost:8090", nil)
var err = http.ListenAndServe("localhost:8090", nil)
log.Fatal(err)
}
同目录下创建html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>go的测试</title>
</head>
<body>
<form action="http://localhost:8090/login" method="post">
用户名:<input type="text" name="userName1"/>
密码:<input type="password" name="password1"/>
<input type="submit" value="登录">
</form>
</body>
</html>
启动
//启动
go run xxmain.go
//打包
go build xxmain.go
go下载第三方包
go get github.com/go-redis/redis/v8
最近访问github很慢,可以先设置一下代理
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
go连接mysql增删改查
package main
import (
"database/sql"
"fmt"
"html/template"
"log"
"net/http"
_ "github.com/go-sql-driver/mysql"
)
var (
id string
name string
age string
email string
sex string
)
// 定义"/hello" 请求处理函数
func helloHandler(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("启航,go"))
method := request.Method
println(method)
url := request.URL
values := url.Query()
username := values.Get("userN")
password := values.Get("passW")
println(username, password)
}
// 定义"/world" 请求处理器函数
func worldHandler(writer http.ResponseWriter, request *http.Request) {
writer.Write([]byte("go web world"))
// 获取请求方式
method := request.Method
println("请求方式", method)
if request.Method == "GET" {
t, _ := template.ParseFiles("login.html")
t.Execute(writer, nil)
} else {
// 解析post url 参数
url := request.URL
values := url.Query()
userName := values.Get("userName")
password := values.Get("password")
println(userName, password)
// 解析表单参数
request.ParseForm()
userName1 := request.Form.Get("userName1")
password1 := request.Form.Get("password1")
println(userName1, password1)
}
}
func main() {
//为""/hello" 路由绑定处理器函数
// http.HandleFunc("/hello", helloHandler)
// 为"/world"路由绑定处理器函数
// http.HandleFunc("/login", worldHandler)
//启动服务并监听8090端口
//err := http.ListenAndServe("localhost:8090", nil)
// var err = http.ListenAndServe("localhost:8090", nil)
// log.Fatal(err)
db, err := sql.Open("mysql", "root:xdn123@tcp(127.0.0.1:3306)/xdn?charset=utf8")
if err != nil {
fmt.Println(err)
return
}
defer db.Close()
//sqlselect(db)
//insert(db)
//delete(db)
update(db)
}
// 查询 数据
func sqlselect(db *sql.DB) {
rows, err := db.Query("select id,name,age,email from user")
if err != nil {
fmt.Println("数据库查询出错执行出错")
}
for rows.Next() {
//按表名的顺序读取参数
err := rows.Scan(&id, &name, &age, &email)
if err != nil {
log.Fatal(err)
}
fmt.Println(id, name, age, email)
}
rows.Close()
}
// 插入
func insert(db *sql.DB) {
result, err := db.Exec("INSERT user (id,name,age,email) VALUES (?,?,?,?)", "6", "苏日瑞", 22, "test@qq.com")
if err != nil {
fmt.Println("数据库执行插入出错", err)
return
}
changelow, err := result.RowsAffected()
if err != nil {
}
fmt.Println("共计", changelow, "行受到影响")
}
// 删除第5条数据
func delete(db *sql.DB) {
result, err := db.Exec("DELETE FROM user WHERE `Id` = ?", 1551481265541181442)
if err != nil {
fmt.Println("数据库执行删除出错", err)
return
}
changelow, err := result.RowsAffected()
if err != nil {
}
fmt.Println("共计", changelow, "行受到影响")
}
// 更新
func update(db *sql.DB) {
result, err := db.Exec("update user set name = '开林' WHERE user.Name=?", "hhh")
if err != nil {
fmt.Println("数据库执行更新出错")
}
changelow, err := result.RowsAffected()
if err != nil {
}
fmt.Println("共计", changelow, "行受到影响")
}
数据结构如下:
Go解析16进制单精度浮点数到10进制
import (
"math"
)
func hexToFloat32(hexStr string) float32 {
var num uint32
_, err := fmt.Sscanf(hexStr, "%x", &num)
if err != nil {
panic("Invalid hex string")
}
// 将 uint32 转换成 []byte,这里使用大端字节序
b := []byte{
byte(num >> 24),
byte(num >> 16),
byte(num >> 8),
byte(num),
}
// 按照 IEEE 754 标准解析二进制数
sign := int(b[0]>>7) & 1
exponent := int(b[0]&0x7f)<<1 | int(b[1]>>7)
mantissa := uint32(b[1]&0x7f)<<16 | uint32(b[2])<<8 | uint32(b[3])
// 计算 10 进制值
f := math.Pow(-1, float64(sign)) * (1 + float64(mantissa)/8388608) * math.Pow(2, float64(exponent)-127)
return float32(f)
}
Go连接sqlserver增删改查之坑点
坑点1
_ "github.com/denisenkom/go-mssqldb"包的db.Exec()函数无法动态传参,报错如下:
解决:使用_ "github.com/mattn/go-adodb"驱动包windows系统可以正常增删改查操作
但是 _ "github.com/denisenkom/go-mssqldb"这个驱动在linux系统可以正常使用
坑点2
虽然使用_ "github.com/mattn/go-adodb"驱动包可以正常增删改查操作,但是表名后要写字段名,否则报类型不匹配错误。
go的定时任务
"github.com/go-co-op/gocron" #第一步 导包
func forgetVlue(){
//定时执行的业务写在此处
}
func main (){
timezone, _ := time.LoadLocation("Asia/Shanghai")
s := gocron.NewScheduler(timezone)
// 每10秒执行一次
s.Every(10).Seconds().Do(func() {
go forgetVlue()
})
// 每秒执行一次
// s.Every(10).Second().Do(func() {
// go cron2()
// })
s.StartBlocking()
}
引入暂时不用的包,可用如下写法
日期格式化只能写固定时间
t := time.Now()
timex := t.Format("2006-01-02 15:04:05")
//f_t := "dddd"
t1, err := time.Parse("2006-01-02 15:04:05", timex)
Gin的简单结构
第一步 引包
第二步 如下
Gin使用结构体返回json数据,首字母要大写,否则返回的对象为空。
Go打包到linux可执行文件
chmod 777 xxx #加权限
cat /etc/profile #配置文件的路径
#linux中配置go的开发环境
export GOROOT=/xdnsafe/Go/gohome/go <---------go的安装目录
export GOPATH=/xdnsafe/Go/gopath <---------go的项目目录
export PATH=$PATH:$GOROOT/bin
#配置完成后更新配置
source /etc/profile
①执行go env -w GO111MODULE=on
②执行go env -w GOPROXY=https://goproxy.io,direct
后台启动
setsid ./xxx #后台启动
ps -ef | grep xxx #查看是否成功
如下:
root 1809029 1 0 10:15 ? 00:00:00 ./sqldb
root 1809043 1797845 0 10:16 pts/276 00:00:00 grep --color=auto sqldb