Golang 标准命令: |
---|
go run xxx :编译程序并运行 |
go build xxx :编译包,生成exe 可执行文件 |
go install xxx :编译程序,(下载第三方包时,可以编译手动下载的包) |
go env :打印Go语言的环境信息 |
go version:打印Go语言的版本信息 |
go clean:消除go命令遗留的命令和文件 |
go list:打印当前包信息 |
下载第三方包时的参数: go get xxx |
---|
-x:打印全部信息 |
-d:下载不安装 |
-u:更新已有包 |
-f:与-u一起使用,更新包,忽略已有包 |
-fix:先修正包,再安装 |
-t:下载包时同时下载依赖包 |
path=C:\Go;C:\Go\bin
GOROOT=C:\Go
GOPATH=C:\gopath;F:\go
set GOPATH=C:\gopath;F:\go
- go get -x github.com/akavel/rsrc
- go get -x github.com/lxn/win
- go get -x github.com/lxn/walk
fyne:Go
中基于Material Design 跨平台GUI- go get -x github.com/fyne-io/fyne
- go get -x fyne.io/fyne
gowd
:用户界面,使用GO和HTML / JS
/ CSS
构建跨平台的GUI应用- go get -x github.com/dtylman/gowd
beego:web
开发框架- go get -x github.com/beego/bee
- go get -x github.com/astaxie/beego
Gin:Go(Golang)
编写的Web框架- go get -x github.com/gin-gonic/gin
- go get -x github.com/go-playground/locales (依赖包)
- go get -x github.com/golang/protobuf/proto (依赖包)
- go get -x github.com/mattn/go-sqlite3
- go get -x github.com/mikespook/mymysql
- go get -x github.com/go-sql-driver/mysql
- go get -x github.com/jinzhu/gorm // gorm: 数据库操作
packr
:打包机,将静态文件嵌入Go二进制文件- go get -x github.com/gobuffalo/packr
goquery
:爬虫- go get -x github.com/PuerkitoBio/goquery
- go get -x golang.org/x/net/html (依赖包)
captcha
:图像和音频验证码的生成和验证- go get -x github.com/dchest/captcha
- go get -x github.com/hanguofeng/gocaptcha
json
解析- go get -x github.com/thedevsaddam/gojsonq
unioffice
:出来wps
文档go get -x github.com/unidoc/unioffice
包安装代理
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
go mod 问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vZUljCJh-1661838362952)(F:\1笔记\04.笔记整理\upload\image-20201219221501672.png)]
cmd 中运行命令
go env -w GO111MODULE=on
go get 下载包
下载后的包在 C:\Users\Administrator\go\pkg\mod
中
把包复制到 C:\Users\Administrator\go\src
目录中即可使用
go mod init [name]
引入自定义包
// [name]/router -> go.mod init时的name,router是目录名
import (
[name]/router
)
func main() {
// rou是包名
rou.Request()
}
运行后会自动生成 go.sum
文件
bee new [name]
git clone [email protected]:sqrtcat/easy-gin.git
// defer 是在一个函数return之后执行
defer db.Close()
// 结构体
type User struct {
Id int // 能返回数据
name string // 返回为空
}
当一个结构体的名称为大写时才能在包中任意使用
当一个结构体的字段名为大写时才能在其他地方中获取到
当做web服务 使用到结构体时,字段名大写才能返回数据
package [name]
当在同一目录下的不同包中定义的同一包名,某一包中的全局变量就是相同包名的全局变量
比如:当在 test1.go 中
package test
,test2.go 中package test
,全局变量公用
test1.go
package test
var global = "123"
test2.go
package test
func Test1(){
fmt.Println(global)
}
test3.go
package test
func Test2(){
fmt.Println(global)
}
获取参数
// post
message := c.PostForm("message")
// get
lastname := c.Query("lastname")
package main
import (
"io"
"os"
router "web-server/router"
"github.com/gin-gonic/gin"
)
// main 入口
func main() {
// 创建记录日志的文件
f, _ := os.Create("web.log")
gin.DefaultWriter = io.MultiWriter(f)
// 创建路由
r := gin.Default()
r.Static("/assets", "../assets")
// 记录日志
gin.DebugPrintRouteFunc = func(httpMethod, absolutePath, handlerName string, nuHandlers int) {}
// adminapi 管理员
var adminapi = r.Group("/admin")
{
// 登录
adminapi.POST("/login", router.Login)
}
r.Run(":6061")
}
package router
import (
"net/http"
"strconv"
"time"
util "web-server/tool"
"github.com/gin-gonic/gin"
)
// Login 登录
/**
time: 2021年1月18日17:47:46
@username 账号
@password 密码
**/
func Login(res *gin.Context) {
// 接收参数
username := res.PostForm("username")
password := res.PostForm("password")
res.JSON(http.StatusOK, gin.H{
"code": 200,
"id": 1,
"data": result,
"msg": "登录成功",
})
}
package mysql
import (
"database/sql"
"fmt"
"strings"
util "web-server/tool"
_ "github.com/go-sql-driver/mysql"
)
//数据库的基础信息
const (
userName = "xxxxxx" // 连接名称
password = "xxxxxx" // 连接密码
ip = "web" // 连接地址
port = "3306" // 端口号
dbName = "web" // 数据库名称
)
// Connection 连接数据库
func Connection() *sql.DB {
// 连接参数
path := strings.Join([]string{userName, ":", password, "@tcp(", ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
// 打开数据库
db, _ := sql.Open("mysql", path)
// defer在return时就会执行,所有连接数据库的操作不需要执行close
// defer db.Close()
// 设置最大连接数和最大闲置连接数
db.SetMaxIdleConns(20)
db.SetMaxOpenConns(20)
// 测试连接
err := db.Ping()
util.Errors(err)
fmt.Println("数据库连接成功")
return db
}
package api
import (
"net/http"
"github.com/gin-gonic/gin"
)
// Cors 跨域
func Cors() gin.HandlerFunc {
return func(res *gin.Context) {
method := res.Request.Method
res.Header("Access-Control-Allow-Origin", "*")
res.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token")
res.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
res.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
res.Header("Access-Control-Allow-Credentials", "true")
//放行所有OPTIONS方法
if method == "OPTIONS" {
res.AbortWithStatus(http.StatusNoContent)
}
// 处理请求
res.Next()
}
}