使用WSL搭建go开发环境并使用kratos框架
1、开启wsl并安装linux
WSL允许在windows运行linux发行版本,首先在windows程序和功能中开启wsl功能,具体操作勾选“适用于linux的windows子系统”并重启系统。
在微软应用商店安装linux子系统:
安装完ubuntu后打开系统,开启root用户:
sudo passwd root
然后按照提示输入两次新的密码,并确认
切换成管理员用户登陆:
su root
以默认账户登录wsl的ubuntu系统:
C:\Users\Administrator(当前系统用户)\AppData\Local\Microsoft\WindowsApps\ubuntu.exe config --default-user root
重启wsl :关闭wsl:wsl --shutdown 10s后,在执行wsl命令
2、在linux中安装go开发环境
wget https://dl.google.com/go/go1.21.3.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz
查看go安装版本 go version
查看go的开发环境配置: go env 配置相关环境:
export GOPATH=/root/go
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOBIN='/root/go/bin'
Export GOPROXY="https://goproxy.cn, direct"
刷新配置文件:
source ~/.bash_profile 或 source /etc/profile
go proxy代理设置:(一次性设置)
go env -w GOPROXY="https://goproxy.cn, direct"
3、安装protoc(probobuf)解析grpc proto文件
下载地址https://github.com/protocolbuffers/protobuf/releases文件:protoc-22.0-linux-x86_64.zip
下载解压后文件拷贝,cp protoc-22.0/bin/protoc /usr/bin/protoc
更改权限 chmod 755 /usr/bin/protoc
查看版本 protoc --version 显示libprotoc 22.0
4、安装依赖注入插件wire
go install github.com/google/wire/cmd/wire
wire文件安装在GOPATH的bin下可执行文件wire.exe,执行命令:
$GOPATH/bin/wire wire.go(所在文件目录) 生成wire_gen.go文件(不可更改,再次生成会覆盖)
5、开发工具配置
1)goland
设置GOPATH和GOROOT,步骤如下:File=> Settings=>Go=>GOROOT设置为\\wsl$\Ubuntu\usr\local\go\go1.21.3,GOPATH设置为\\wsl$\Ubuntu\root\go。
设置Go Modules(便于下载引用包):
2)vs code
安装wsl插件:
6、kratos框架使用
参考官网:https://go-kratos.dev/docs/getting-started/usage, 使用kratos -v 查看安装版本
注:若提示无kratos命令,则代表kratos命令没有加入path路径。 kratos命令存在于GOPATH得bin目录下.例如:go env 查看GOPATH为/root/go. 则执行/root/go/bin/kratos -v,若没有问题,则加入path: export PATH=$PATH:/root/go/bin 刷新配置文件:source /etc/profile
创建kratos项目文件后,利用make init,make all等命令更新引用文件。几点注意事项归纳如下:
1)若包引用报红线,则在引用包警示灯点击选择sync同步到当前项目。
2)goland google/api/annotations.proto 标红
首先,看看自己安装Protocol Buffers插件没, 没有的话需要先安装,其次,到设置语言和框架下面将Protocol Buffers的文件路径取消自动设置,添加项目的third_party路径(file=>settings=>Languages and Frameworks)
3)swagger文件的使用(按照kratos官网生成openapi.yaml文件)
备注: make api 命令生成yaml文件,若报错:protoc-gen-go: program not found or is not executable,则通过命令安装:
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}或
go get -u google.golang.org/protobuf,在gopath中找到 protoc-gen-go进行拷贝,如:cp protoc-gen-go /usr/local/bin,或直接导入export PATH=$PATH:/root/go/bin 刷新配置文件:source /etc/profile。
go get -u github.com/go-kratos/swagger-api
然后在internal/server/http.go的NewHTTPServer中进行初始化和注册,请尽量将这个路由注册放在最前面,以免匹配不到。(浏览器中访问服务的/q/swagger-ui/路径即可打开Swagger UI)
import "github.com/go-kratos/swagger-api/openapiv2"
openAPIhandler := openapiv2.NewHandler()
srv.HandlePrefix("/q/", openAPIhandler)
4)kratos run 端口占用问题
结束当前运行命令ctral+C,再次启用可能出现端口占用问题.
Windows操作先找到占用端口(9000)的pid,查看pid使用情况,kill掉pid。
netstat -ano|findstr “9000”
tasklist|findstr “14096”
taskkill /f /t /im 14096
Linux操作:
netstat -apn |grep 9000
ps -ef|grep 81506
kill -9 81506
5)访问服务地址
服务配置http地址为:0.0.0.0:8000,grpc地址:0.0.0.0:9000,linux中访问服务curl http://localhost:9000 在wsl中查看linux子系统ip地址,ip addr | grep eth0,查看地址inet:ip地址。则外部访问为:http://ip:8000(http://172.18.216.241:8000)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix