• 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 - 风声风语 - 博客园

  • 相关阅读:
    icons、tabs、tabs2、toolbars例子详解
    list、listhorizontal、listsearch的理解
    forms、forms_toolbar例子理解
    Accelerometer
    audio,carousel的学习
    数组去空项,相同项
    require与include函数
    php下intval()和(int)转换使用与区别
    PHP需要拷到system32下的加载库及一些相关知识
    字符转义
  • 原文地址:https://www.cnblogs.com/lxwphp/p/16811965.html
Copyright © 2020-2023  润新知