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 打包,编译

参考:Linux下提示命令找不到:bash:command not found - 风声风语 - 博客园

posted @ 2022-10-20 23:42  码农编程进阶笔记  阅读(334)  评论(0编辑  收藏  举报
返回顶部 有事您Q我