大家好,我是考100的代码小小顾,祝大家学习进步,加薪顺利呀。今天说一说温温的go编程学习笔记(1),希望您对编程的造诣更进一步.
为什么学GO?
希望能更底层地了解服务器框架。
怎么学习?
先复制一下别人的项目,改成自己的试试看
我现在用的是什么版本?
go version
go version go1.17 windows/amd64
来一个hellworld?
go是怎么导入自己的包的?
func Config(name …string) *gcfg.Config {
return gins.Config(name…)
} 解释一下语法?
*gcfg 是 package gcfg
Config 是类
func (c *Config) MustGet(ctx context.Context, pattern string, def …interface{}) *gvar.Var { 解释一下语法?
def …interface{} 当成多个参数吧
go可以脚本运行吗?
怎么获取现在path环境?
“github.com/gogf/gf/v2/os/genv”
func (s serviceInstall) getGoPathBin() string {
if goPath := genv.Get(`GOPATH`).String(); goPath != “” {
return gfile.Join(goPath, “bin”)
}
return “”
}
怎么复制文件?
“github.com/gogf/gf/v2/os/gfile”
err = gfile.CopyFile(gfile.SelfPath(), dstPath.filePath)
怎么配置go的仓库镜像,让下载包的速度加快?
go提供了什么工具给我们用?GOPROXY是一个工具吗?
go fmt, goimports, golangci-lint
go的命令行使用有什么参数?
bug start a bug report
build compile packages and dependencies
clean remove object files and cached files
doc show documentation for package or symbol
env print Go environment information
fix update packages to use new APIs
fmt gofmt (reformat) package sources
generate generate Go files by processing source
get add dependencies to current module and install them
install compile and install packages and dependencies
list list packages or modules
mod module maintenance
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet report likely mistakes in packages
以下是帮助命令,相当于用help去看一些热点问题文档吧?
Use “go help <command>” for more information about a command.
Additional help topics:
buildconstraint build constraints
buildmode build modes
c calling between Go and C
cache build and test caching
environment environment variables
filetype file types
go.mod the go.mod file
gopath GOPATH environment variable
gopath-get legacy GOPATH go get
goproxy module proxy protocol
importpath import path syntax
modules modules, module versions, and more
module-get module-aware go get
module-auth module authentication using go.sum
packages package lists and patterns
private configuration for downloading non-public code
testflag testing flags
testfunc testing functions
vcs controlling version control with GOVCS
vgo是什么鬼?
vgo是基于Go Module规范的包管理工具,同官方的go mod命令工具类似。
go install 是什么 ?
大概就是安装一个 命令 让你可以用
具体解释是
Install 编译并安装由导入路径命名的包。
可执行文件安装在由 GOBIN 环境变量命名的目录中,如果未设置 GOPATH 环境变量,则默认为 $GOPATH/bin 或 $HOME/go/bin。
$GOROOT 中的可执行文件安装在 $GOROOT/bin 或 $GOTOOLDIR 而不是 $GOBIN 中。
go install 怎么用?好像go安装模块的方式有两种吗?一种是install 一种是项目的包安装吗?go install也是用GOPROXY 去下载包的吗?
go install: version is required when current directory is not in a module。Try ‘go install gf@latest’ to install the latest version
需要指定版本
go install: gf@latest: malformed module path “gf”: missing dot in first path element
本地没有这个包,要下载
go get 是什么?
go get 和 go install go.mod 有什么区别?
go get 是准备废弃的
go get 比 install 就是多了个下载包代码?
go.mod 是个文件吧
go get -d library,仅下载它;
对下载的包进行更改;
go install library安装本地版本。
go env有什么用?
可以查看环境变量 可以设置环境变量?
go env GOPROXY
go env GOPATH
go env GOBIN
设置环境变量
go env -w GOBIN=K:\goworkpath\bin
go env -w 是设置到path 还是个人设置?
个人设置
go env GOENV
C:\Users\Administrator\AppData\Roaming\go\env
对于函数来说 只要在文件头上标明是同一个package 就可以直接调用吗?
好像是的
go的 package 是随便定义的吗?
consts 的常量包怎么弄?
用 var
go-language-learning-notes\go语言基础\语法例子\常量consts
go的 var 和const 有什么区别?
变量(var) & 常量(const)
局部变量
局部变量声明就必须使用,否则编译时会报错
全局变量
全局变量声明后可以不使用,编译时不会报错
全局变量首字母必须大写,否则从其他包中就无法访问到
由于所有语句必须在函数中,所以无法通过 := 声明全局变量,全局变量只能通过 var 进行声明
常量
常量在编译时就会确定,之后无法修改
常量声明和变量相似,但是声明时必须要有值
大小写的变量名有什么区别吗?
全局变量首字母必须大写,否则从其他包中就无法访问到
在函数方法里面又有一个 go func() {} () 是什么语法?
go func() {
…..
}()
以并发的方式调用匿名函数func
在项目中 可以用于写入log啊什么的
go 的 panic 是什么意思?
应该大概是引发异常的意思
好像还跟 recover 是对应的
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { 是啥语法?
大概是一种可以写在参数里面的匿名函数
var (Dict = dict{}) 是什么类型?dict字典类型怎么用?有什么好用的数据结构?
var data *bo.Admin 是什么意思?有什么好用的数据结构
新建一个变量吧! 是指针类型的变量
go: cannot find main module, but found .git/config in k:\go_work_path\go-language-learning-notes
大概是目录不对吧!这提示是想找到mod那个文件
go的debug工具 dlv怎么用?
K:\goworkpath\bin\dlv.exe -help
vscode里面好像是用到 dap 模式 Starts a headless TCP server communicating via Debug Adaptor Protocol (DAP).
func (session) GetAdmin(r *ghttp.Session) (*bo.Admin, error) { 这段代码中的 *bo.Admin 怎么理解? *号是什么意思?是引用的意思吗?
返回指针?
& 是什么意思?什么时候回用到&?为什么len计算长度要用指针?内存地址和指针有什么区别?
变量就是内存地址,是心目中的那一段数据
Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。
内存地址 就是 相当于默认有个 & 在变量前面了
指针 就要用到* 跟 & 是相反操作
var err *error 或者 err := new(error) 这两个的区别?
var err *error 或者 err := new(error) 这两个最后的类型都是 *error 区别是分没分配内存而已
new之后是是指针,还是内存地址?var data MyJsonName 和 var data = new(MyJsonName) 有什么区别?make又是什么?auth_info := (*entity.Userguanli)(nil)?
new() 分配内存函数,返回内存地址
var name type :
定义一个 type 类型的变量 name, 并分配内存空间给 name 赋 type 类型的零值。
var name *type :
定义一个 type 类型的指针变量 name, 指针变量不分配内存空间,零值为 nil。
用这样的指针来新建变量的话,不能用这样的操作
var admin *entity.Userguanli
admin.ID = req.ID
应该是
var admin = new(entity.Userguanli)
admin.ID = req.ID
一般都是优先用指针变量
make() 分配内存函数
用法总结:
一般不用 new() 来新建变量,凡遇到 chan、map 和 slice 就用make()
make(chan int, 1)
make(map[string]int, 5)
make([]string, 5)
其余情况用 := 或者 var 就能解决,可以不用 new()
i := 0
f := 0.0
b := false
str := “”
p := person{}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4197.html