wsl2 ubuntu安装golang
目录
下载
golang 导入 wsl 代码
打开一个新项目 一直加载 go list -m json all
Debug 提示gcc 不存在 ,在 Ubuntu 20.04 上安装 GCC
环境变量消失
编辑器里面包报红
#先给权限
#选择项目的时候删除./idea文件试试
异常
Mysql sql model 报错 which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mod e=only_full_group_by"
彻底解决方案
Redis踩坑——MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on
为啥会选择独立安装golang呢,我的本地环境是wsl2+ubuntu+idea,想通过本地虚拟机直接debug,就不能把golang装在dokcer里面了
下载
wget https://golang.google.cn/dl/go1.18.7.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.18.7.linux-amd64.tar.gz
vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/home/go
export GOBIN=$GOPATH/bin
#保存
source /etc/profile
export GO111MODULE=on
export GOPROXY='https://goproxy.io'
export GOPROXY=https://mirrors.aliyun.com/goproxy/
golang 导入 wsl 代码
打开一个新项目 一直加载 go list -m json all
Ennnnnnnnnn
记得开代理
Debug 提示gcc 不存在 ,在 Ubuntu 20.04 上安装 GCC
默认的 Ubuntu 软件源包含了一个软件包组,名称为 "build-essential",它包含了 GNU 编辑器集合,GNU 调试器,和其他编译软件所必需的开发库和工具。 想要安装开发工具软件包,以 拥有 sudo 权限用户身份或者 root 身份运行下面的命令:
sudo apt update
sudo apt install build-essential
这个命令将会安装一系列软件包,包括gcc
,g++
,和make
。 你可能还想安装关于如何使用 GNU/Linux开发的手册。
sudo apt-get install manpages-dev
通过运行下面的命令,打印 GCC 版本,来验证 GCC 编译器是否被成功地安装。
gcc --version
在 Ubuntu 20.04 软件源中 GCC 的默认可用版本号为9.3.0
:
gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
环境变量消失
#注意查看env环境变量里面的路劲
sudo vim ~/.profile
export GOROOT="/usr/local/go"
export GOBIN=$GOROOT/bin
export GOPATH="/home/go"
export PATH=$PATH:$GOPATH/bin
sudo vim ~/.bashrc
#添加
export GOROOT="/usr/local/go"
export GOBIN=$GOROOT/bin
export GOPATH="/home/go"
export PATH=$PATH:$GOPATH/bin
#保存
source ~/.bashrc
编辑器里面包报红
#先给权限
#因为你的用个人账户开,比如我的账户test,遇到事情先给权限
sudo chown -R test:test-R /home
#选择项目的时候删除./idea文件试试
异常
Mysql sql model 报错 which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mod e=only_full_group_by"
SELECT @@sql_mode; set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
彻底解决方案
-
进入mysql :docker exec -ti 14ea13dd0cf8 /bin/bash
-
输入密码:mysql -uroot -p
-
查看sql_model:SELECT version(),@@SESSION.sql_mode,@@GLOBAL.sql_mode;
此时发现有ONLY_FULL_GROUP_BY
-
执行以下脚本:
mysql -uroot -p
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
#查询sql model
SELECT version(),@@SESSION.sql_mode,@@GLOBAL.sql_mode;
-
此时在看sql_model:SELECT version(),@@SESSION.sql_mode,@@GLOBAL.sql_mode;
-
重启项目即可 dokcer restart mysql
Redis踩坑——MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on
不能彻底解决
root@ubuntu:/usr/local/redis/bin# ./redis-cli
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
彻底解决
vim /etc/sysctl.conf
'vm.overcommit_memory = 1'
#然后重启
将vm.overcommit_memory改为1有什么作用呢,网上看到一个博客是如下解释,我个人也比较同意
0 — 默认设置。个人理解:当应用进程尝试申请内存时,内核会做一个检测。内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。举个例子,比如1G的机器,A进程已经使用了500M,当有另外进程尝试malloc 500M的内存时,内核就会进行check,发现超出剩余可用内存,就会提示失败。
1 — 对于内存的申请请求,内核不会做任何check,直到物理内存用完,触发OOM杀用户态进程。同样是上面的例子,1G的机器,A进程500M,B进程尝试malloc 500M,会成功,但是一旦kernel发现内存使用率接近1个G(内核有策略),就触发OOM,杀掉一些用户态的进程(有策略的杀)。
2 — 当 请求申请的内存 >= SWAP内存大小 + 物理内存 * N,则拒绝此次内存申请。解释下这个N:N是一个百分比,根据overcommit_ratio/100来确定,比如overcommit_ratio=50,那么N就是50%。