温温的go编程学习笔记(1)

温温的go编程学习笔记(1)“github.com/gogf/gf/v2/os/genv”用法总结:一般不用 new 来新建变量,凡遇到 chan、map 和 slice

为什么学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

(0)
上一篇 2023-04-03
下一篇 2023-04-01

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注