go遇到的坑

Wesley13
• 阅读 403

GO配置:

GOROOT:go的安装路径:C:\Go

GOPATH:go命令安装的包存放的路径,这里放在%GOROOT%\gocode

GOROOT是不用配置环境变量就可以用的,但是GOPATH要配置才能用,如果没有配置的话默认是在%{USER}%\go文件夹下。

GOPATH可以配置多个,go get默认将包放在第一个目录下面,列如我配置了两个:

%GOROOT%\gocode;G:workspace\go,可以配置多个GOPATH的特性对开发来将就很有用了,我们可以将自己的工程不和下载的包搅在一起,使用时定义自己的工作空间,但是会有一个坑,定义的struct报错undefined后便会讲到。

每个目录下面都包含三个目录(自己创建),src(源码包),pkg(编译后的包文件),bin(可执行文件),其中src包必须存在。

Go项目必须放在GOPATH的src目录下才能正常运行,否则可能出现项目目录下静态文件html等找不到的情况,默认文件路径是相对路径,当前目录为项目目录。

Go项目在运行时是先编译,后运行的,找包的时候是先从GOPATH的第一个目录里面开始寻找,没有找到的话再逐个往下寻找,所有会出现一个问题,就是go run 无法运行,idea run无法运行,但是debug可以运行。

定义的结构体报错undefined:

举个例子(遇到过):

以下是GOPATH的两个目录,简写为gocode个go,创建一个项目beego_learn,我们将该项目放进两个目录下面,gocdoe/src/beego_learn,go/src/beego_learn

接下来我们在第一个目录下运行,成功,在pkg中生成了编译后的文件。

接下来我们在第二个目录中增加一些内容,比如定义一个Xxxcontroller结构体,然后在main方法中使用它。这个是后编译,运行,就会报错,Xxxcontroller is undefined.甚至可能出现直接使用该结构体的时候就报错红色,明明定义了,却不能使用的情况。

这就是因为第一个目录里面有了beego_learn编译后的pkg,我们在第二个目录工作的时候,引入的包名是beego_learn(因为在GOPATH目录下的所有src都能变异成pkg引入),这个时候,系统就会首先冲第一个目录中查找,发先有beego_learn的包,于是就引入了,但是引入的包是没有我们定义的Xxxcontroller的,所以是会报错Xxxcontroller is undefined或者直接编译就报错红色的。

至于go的语法,库就不讲了,比较容易,空了有值得纪念的再更新吧~~

over!~~

点赞
收藏
评论区
推荐文章
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
1年前
vscode安装go所有插件(全网最全)
1.vscode安装go所有插件vscode版本:1.51.0go版本:versiongo1.15.2windows/amd64git客户端版本:Git2.29.2.264bit2.使用vscode自动安装1.需要提前安装go、vscode、git客户端,配置git环境,配置go环境,GOPATH这个环境
Wesley13 Wesley13
1年前
go环境变量配置 (GOROOT和GOPATH)的区别和含义
<divid"myeditor"class"contentarticleentry"<pGOROOT就是go的安装路径</p<p在~/.bash\_profile中添加下面语句:</p<pGOROOT/usr/local/go</p<pexportGOROOT</p<p当然,要执行go命令和go工具,就要配置go的可
Wesley13 Wesley13
1年前
go mod 无法自动下载依赖包的问题
go11以后启用了gomod功能,用于管理依赖包。当执行gomodinit生成go.mod文件之后,golang在运行、编译项目的时候,都会检查依赖并下载依赖包。在启动了gomod之后,通过gomod下载的依赖包,不在放在GOPATH/src中,而是放到GOPATH/pkg/mod中。比如我当前的GO
Wesley13 Wesley13
1年前
Go 环境常用变量记录
Go开发环境依赖于一些操作系统环境变量,你最好在安装Go之间就已经设置好他们。如果你使用的是Windows的话,你完全不用进行手动设置,Go将被默认安装在目录c:/go下。这里列举几个最为重要的环境变量:$GOROOT 表示Go在你的电脑上的安装位置,它的值一般都是$HOME/go,当然,你也可以安装在别的地方。
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
GOROOT、GOPATH、GOBIN
GOROOTgolang安装路径。GOPATHGOPATH可以设置多个工程目录,linux下用冒号分隔(必须用冒号,fishshell的空格分割会出错),windows下用分号分隔,但是goget只会下载pkg到第一个目录,但是编译的时候会搜索所有的目录。在fishshell下,使用set
Wesley13 Wesley13
1年前
GOPATH
\TOC\GOPATH工作目录就是我们用来存放开发的源代码的地方,对应的就是Go里的GOPATH这个环境变量。这个环境变量指定之后,我们编译源代码等生成的文件都会放到这个目录下,GOPATH环境变量的配置参考golang环境搭建(https://www.oschina.net/action/GoToLink?urlhttps%3A%
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
5个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为