golang 语言学习笔记
1.-bash: go: 未找到命令问题
方法1:(亲测可行)
echo $PATH //查看go 命令路径是否存在
将go安装路径添加到/etc/profile
sudo vi /etc/profile
最后关键一步不能丢:加载配置文件,使之生效
source /etc/profile
添加后效果:
方法2:
首先,查看$PATH中是否包含了这些命令。
$PATH:决定了shell到哪些目录中去寻找命令或程序,PATH值是一系列的目录。当运行程序时,linux到这些目录下搜索进行编译链接。
格式:
PATH = $PATH:<PATH1>:<PATH2>:<PATH3>:...:<PATH N>
可以将自己指定的路径加到PATH中,中间用冒号":"隔开。环境变量更改后,会在用户下次登录的时候生效;若想立即生效,则需要执行:
$ source .bash_profile
查看PATH值
export
或者
echo $PATH
[vagrant@bogon ~]$ export
declare -x GOBIN="/home/vagrant/go/bin"
declare -x GOPATH="/home/vagrant/go"
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/home/vagrant"
declare -x HOSTNAME="bogon"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="vagrant"
declare -x LS_COLORS="rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:"
declare -x MAIL="/var/spool/mail/vagrant"
declare -x OLDPWD="/usr/local/go"
declare -x PATH="/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/nginx/sbin:/usr/local/php7/bin:/usr/local/mongodb/bin:/home/vagrant/.local/bin:/home/vagrant/bin:/home/vagrant/go/bin:/home/vagrant/.local/bin:/home/vagrant/bin:/home/vagrant/.local/bin:/home/vagrant/bin:/usr/local/nginx/sbin:/usr/local/php7/bin:/usr/local/mongodb/bin:/usr/local/go/bin"
declare -x PWD="/home/vagrant"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="10.0.2.2 49665 22"
declare -x SSH_CONNECTION="10.0.2.2 49665 10.0.2.15 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm-256color"
declare -x USER="vagrant"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SESSION_ID="2"
[vagrant@bogon ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/nginx/sbin:/usr/local/php7/bin:/usr/local/mongodb/bin:/home/vagrant/.local/bin:/home/vagrant/bin:/home/vagrant/go/bin:/home/vagrant/.local/bin:/home/vagrant/bin:/home/vagrant/.local/bin:/home/vagrant/bin
添加$PATH环境变量:
[vagrant@bogon go]$ export GOPATH=/home/vagrant/go
[vagrant@bogon go]$ export GOBIN=$GOPATH/bin
[vagrant@bogon go]$ export PATH=$PATH:$GOBIN
[vagrant@bogon go]$ source ~/.bash_profile
这种方法添加PATH 在终端关闭后会消失。所有建议通过上面第一种方式编辑/etc/profile 修改PATH,也可修改/home目录下的 .bashrc
$PATH下目录简介
PATH中主要有以下四个目录:
/bin, /usr/bin, /sbin, /usr/sbin
主要存放的东西:
./bin:
bin为binary的简写主要放置一些系统的必备执行档案。如:cat,cp, chmod df, dmesg, gzip, kill, ls, mkdir, more, mount, rm, su, tar 等。
/usr/bin:
主要放置一些应用软体工具的必备执行档例。如:c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。
/sbin:
主要放置一些系统管理的必备程式例。如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。
/usr/sbin:
放置一些网路管理的必备程式例。如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。
2.GOROOT 与 GOPATH 区别
GOROOT 定义为指定安装 GO 的根目录。在之前的 Makefile 中,引入其他 Makefile 时,将它作为基础路径。而且,Go 1.0 之后,go tool 利用它查找 Go 编译器(保存在 $GOROOT/pkg/tool/$GOOS_$GOARCH)和标准库(在 $GOROOT/pkg/$GOOS_$GOARCH)。
如果你是一名 Java 开发者,可以将 GOROOT 理解为 JAVA_HOME。源码编译 Go,GOROOT 将自动发现(all.bash 的上级目录),然后设置到 go 工具链。
GOPATH:为我们开发常用的目录,建议不要和Go的安装目录一致,在该文件夹下又有三个文件夹:src、pkg、bin,这里src是自己新建的,pkg和bin是后面生成的。
src:主要存放我们的源代码
bin:存放编译后生成的可执行文件,可以自己执行
pkg: 编译后生成的文件(.a文件)(非main函数的文件在go install后生成)
GOBIN:是GOPATH下的bin目录
PATH:环境变量,需要go-bin目录加入到path路径下,生成可执行文件就可以直接运行了。
如下命令查看:
$ echo $GOROOT
$ go env
/home/dfc/go
3.安装beego 和bee 工具
beego的安装:
go get github.com/astaxie/beego
beego框架升级:
go get -u github.com/astaxie/beego
Bee工具安装:
go get github.com/beego/bee (1.16 及以前)
go install github.com/beego/bee@latest (go 1.17 后)
创建web项目:bee new 项目名称
创建api项目:bee api 项目名称
3.1go get github.com/astaxie/beego没有反应
执行go get github.com/astaxie/beego时,出现的错误大致如下:
go get: module github.com/astaxie/beego: Get "https://proxy.golang.org/github.com/astaxie/beego/@v/list": dial tcp 172.217.163.49:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
出现如上现象大致就是网络问题,无法访问,解决方法如下:
运行cmd,执行如下代码:
go env -w GOPROXY=https://goproxy.cn,direct
再次执行go get github.com/astaxie/beego就可以了
3.2使用 go get -u github.com/beego/bee 报错
原因分析
Go1.17版使用go install安装依赖
go get 用于下载并安装 Go 包、命令等,而 go install 在 module 时代几乎很少使用,在 GOPATH 年代,go install 用来编译安装本地项目。
自 1.16 起,官方说,不应该 go get 下载安装命令(即可执行程序),不过只是这么说,却依然可以使用。
但 Go1.17 开始,如果使用 go get 安装命令会告警。
解决方法:
# Go1.16及以前
go get -u github.com/beego/bee
# Go1.17版本
go install github.com/beego/bee@latest
4.-bash: bee: 未找到命令
bee 是为快速创建beego 项目而创立的工具
找不到bee 安装路径的问题
方法一: 将gopath/bin 下的bee 添加到 /etc/profile
我的gopath : /home/wwwroot/goroot/bin
[vagrant@bogon bin]$ sudo vi /etc/profile #修改添加 bee 的路径
[vagrant@bogon bin]$ source /etc/profile #使配置生效
方法二:
如果还是 bee bash: bee: command not found 请你把GOPATH/bin下的bee.exe 拷贝到 GOROOT/bin里面,也就是你的go语言环境变量的bin里面,然后运行 bee
5. bee 命令的使用
#显示bee 的版本和 go的版本
bee version
6.beego 框架的介绍
相当于PHP框架的ci 轻量级mvc 框架
特点:快速开发,mvc 架构,文档齐全,社区活跃
架构级原理
模块
cache config context httplibs logs orm session toolbox
cache: 支持string类型
- 文件
- 内存
- memcache
- redis(推荐)
config:
- ini
- json: 推荐
- xml
- yaml
context: 上下文模块,http封装,用户的输入和输出
- request:
- response:
httplibs:
- 支持:get,post,put,delete,head
- 支持https
- 支持超时设置:
- 支持文件上传
logs:
- 多种输出引擎:输出到文件,输出到邮件
- 支持异步输出
其他:
orm:model模块
session:用户session
toolbox: 监控工具,定时任务等, 监控告警
7.bee 工具的应用
bee new: 新建项目结构,生成完整的目录结构
bee run : 运行项目,修改代码后自动编译部署,不用停止服务再运行
bee generate: 自动生成代码
8.Go构建项目的时候,解决missing go.sum entry for module providing package <package_name>
[vagrant@bogon studyBeego]$ bee run
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v1.12.0
2022/03/14 16:59:04 INFO ▶ 0001 Using 'studyBeego' as 'appname'
2022/03/14 16:59:04 INFO ▶ 0002 Initializing watcher...
main.go:5:2: missing go.sum entry for module providing package github.com/astaxie/beego (imported by studyBeego); to add:
go get studyBeego
2022/03/14 16:59:05 ERROR ▶ 0003 Failed to build the application: main.go:5:2: missing go.sum entry for module providing package github.com/astaxie/beego (imported by studyBeego); to add:
go get studyBeego
解决方案一:
当在代码中使用了第三方库 ,但是go.mod中并没有跟着更新的时候
如果直接run或者build就会报这个错误
missing go.sum entry for module providing package <package_name>
可以使用go mod tidy 来整理依赖
这个命令会:
删除不需要的依赖包
下载新的依赖包
更新go.sum
解决方案二:(亲测可行)
go build -mod=mod
本人遇到同样的问题,就是用方案解决的。
9.因为我是在mac 里面使用的vagrant 虚拟机,在虚拟机中安装的beego,
在 vagrant 的虚拟机中部署 Web 环境之后直接访问虚拟机的 IP 地址即可访问。
不能使用http://localhost:8080,只能通过IP进行访问 http://192.168.33.11:8080/
192.168.33.11 是我的私有网络,至于如何使用localhost访问,后续再更新
在命令行可以使用locahost 进行访问,但效果肯定不如浏览器直观
[root@bogon studyBeego]# curl http://localhost:8080/
每加载一次,下面都会记录一次 bee run 或者使用 go run main.go 运行项目
tree查看目录结构, 使用如下命令
#centos 下安装tree
yum -y install tree
# 查看目录结构层级
tree -L 3 # 数字3: 代表个3层级
10.因使用的vagrant 虚拟机造成热更新时,加载reload.min.js 每次加载失败,没找到合适的解决方案,故切换到在mac 直接安装beego,如果你有合适的方案欢迎留言评论。
reload.min.js:1 WebSocket connection to 'ws://localhost:12450/reload' failed:
mac 环境下,刷新即可,热加载
11.bee generate 自送生成代码的使用
创建数据表
create table `user` (
`id` int(11) not null auto_increment,
`name` varchar(255) not null default '',
`gender` tinyint(1) not null default 0,
`age` int(11) not null default 0,
primary key (`id`)
) engine=innodb default charset=utf8;
insert into user values(1,'zhangsan',1,21),(2,'lisi',0,23),(3,'wangwu',1,24);
脚手架命令:
# 注意:命令在一行,不要换行 scaffold 不要带s 字母,否则报错命令找不到
bee generate scaffold user -fields="id:int64,name:string,gender:int,age:int" -driver=mysql -conn="root:@tcp(127.0.0.1:3306)/beego"
执行上面命令报错,GOPATH environment is empty,may be you use `go module`
解决方法:
虽然go env中显示是有配置GOPATH的,但是env只没有显示。bee生成的代码执行时还是需要将GOPATH设置到env中。
go env | grep GOPATH
GOPATH="/home/wangjia/go"
1.执行下面这个发现为空:
echo $GOPATH
2.设置
export GOPATH=/home/wangjia/go
echo $GOPATH
/home/wangjia/go
再执行就可以了
12.引入后访问报错 not found
# 引入MySQL驱动就可以了
go get github.com/go-sql-driver/mysql
main.go
orm.RegisterDataBase("default","mysql","root:root@tcp(127.0.0.1:3306)/beego")
其中前一个root 是账号,后一个root 是密码
package main
import (
_ "beego/routers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_"github.com/go-sql-driver/mysql"
)
func main() {
orm.RegisterDataBase("default","mysql","root:root@tcp(127.0.0.1:3306)/beego")
beego.Run()
}
13. bee packge 打包,编译
赞赏码
非学,无以致疑;非问,无以广识