课程代码运行流程及go.mod含义| 青训营笔记

153 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记

第三次课

运行main.go之和终端输入

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"

浏览器访问

http://127.0.0.1:6060/debug/pprof/

运行main.go之和终端输入

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"

浏览器访问

http://localhost:8080/ui/

安装graphviz

需要重启电脑才生效,奇怪。

报错

GOPATHmustnotbesettoGOPATH must not be set to GOROOT. For more details see: 'go help gopath' go.mod没有配置

module github.com/wolfogre/go-pprof-practice
go 1.18

有go.mod

设置里

  • GO模块启用GO模块集成
  • 删除GOPATH

没有go.mod

  • 设置里面GO的配置,两个GOPATH,一个全局GOPATH,一个项目GOPATH。
  • 全局GOPATH是环境变量里配置的。项目GOPATH是下载包的路径。

如果使用了gopath,就不用设置go mod,因为这两个都是用来管理项目,go mod是后来新版本的项目管理方式,很多旧资料上还是使用了go path,所以出现这个问题,只需要把GoLand->settings->project gopath里边的设置删除即可

查到的资料

beego的bee工具为什么强制新建项目在GOPATH/src目录下? GO 的包搜索是从 GOPATH 和 GOROOT 路径下搜索,源码必须要放在 GOROOT 或 GOPATH 的 src 目录下才能找到

报错

GOPATH/go.modexistsbutshouldnot加了go.mod,开启模块支持后,并不能与项目GOPATH/go.mod exists but should not 加了go.mod,开启模块支持后,并不能与项目GOPATH共存,所以把项目从$GOPATH中移出

一堆操作完,连之前的项目打开全是报错

go mod tidy

更新依赖

GO项目报错还能运行

不勾选使用系统环境定义的GOPATH

版本控制里的目录映射

GitHub仓库和本地项目路径映射

go mod init

产生go.mod文件

go mod tidy的使用

  1. 引用项目需要的依赖增加到go.mod文件。
  2. 去掉go.mod文件中项目不需要的依赖。

测试路由

  1. 浏览器url输入不能测试POST请求!!!看清楚是get请求再测

login:1 GET http://127.0.0.1:8080/douyin/user/login 404 (Not Found)

  1. 修改完代码要马上重启服务
  2. 这是一个结构体(go里省略分号),Response(这也是结构体,里面有StatusCode,StatusMsg),一部分是自定义数据
type TestResponse struct { //Response(里面有StatusCode,StatusMsg)
   Response
   CommentList []Comment `json:"comment_list,omitempty"`
   User        User      `json:"user"`
   UserId      int64     `json:"user_id,omitempty"`
   Token       string    `json:"token"`
   TestCode    int8      `json:"test_code"`
}
  1. 在 Golang 的结构体定义中添加 omitempty 关键字,来表示这条信息如果没有提供,在序列化成 json 的时候就不要包含其默认值。(问题:内嵌结构体依然会显示;初始值等于默认值会隐藏。解决方法:改成指针)

www.jianshu.com/p/a2ed0d23d…

  1. 为了将代码中的结构体与 json 数据解耦,通常我们会在结构体的 field 类型后加上解释说明(json:"test_code"),这样无论代码中的变量如何改变,我们都能成功将 json 数据解析出来。
  2. 连接MySQL Go中文文档
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
db, err := sqlx.Connect("mysql", "root:root@(localhost:3306)/mydb")
if err != nil {
   fmt.Printf("connect DataBase failed, err:%v\n", err)
   return
}
db.SetMaxOpenConns(20)
db.SetMaxIdleConns(10)
fmt.Printf("connect DataBase success\n")