这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记
Tips:由于在青训营的项目开发场景中遇到了需要远程开发的需求,因此通过该篇笔记记录如何通过Goland进行远程的Linux环境上Go开发的过程
配置远程Go开发环境
前情提要
- 需要远程开发的场景:比如Kitex不支持Windows开发
- 条件:WIndows(本地) + Linux(远程) + SSH能访问到
配置FTPS
- 打开Goland,点击Tools,然后找到Deployment,点击Configuration,进入远程配置。
2. 点 + 号,找到STPF,创建一个好记得名字,最好和远程服务器相关联。
- 选择要连接的SSH,这一步我们选择SSH configuration,因为之前没有配置过,所以点击右边的三个点,进入配置,如下图所示:
4. 点击+号,创建新的SSH配置,输入相关的信息,如下图所示,需要注意的是这里的用户如果是root,需要去看一下远程服务器是否可以直接通过root登录,如果不行的话还需要在服务器上设置如何通过root直接登录。
- 配置好信息之后,我们点击连接测试,显示成功连接
6.回到上一步,选中刚才创建的SSH配置,然后选择Mapping,我们来配置本地和远程的文件映射路径,下图中,上面是本地项目的路径,下面是要同步上传到服务器的路径。
- 配置完成之后,我们在本地修改代码之后点击Tools,选择第一个同步(Upload to Default Server),或者直接设置为自动同步(AutoMatic Upload)
一些小问题
- 如果ssh不是root用户,需要通过chmod把对应的文件权限给对应用户
- 右击goland中的文件或文件夹可以选择性上传同步
- 即使有些代码在本地无法运行,比如Kitex不支持Windows,我们同样可以选择把对应的依赖都下下来,主要是为了goland的智能提示
- 在远端同步完成后如果依赖库有变动,记得要执行go mod tidy
Go语言的一些基础知识笔记
-
switch可以替代if else
-
slice用make初始化的时候,make([]type,len,cap),会初始化len个默认变量
-
建议用时间戳初始化随机数种子
-
string和number类型的转换
-
go的多种输入方式:bufio.newreader和fmt.scanf
-
在fmt.Errorf中使用:%w关键字来将一个错误关联到错误链中
-
errorIs,可以判定错误链上的所有错误是否含有特定的错误
-
在错误链上获取特定的错误,使用error.As
-
recover只能在被defer的函数中调用,只在当前routine中生效。如果当前的 goroutine 陷入panic,调用 recover 可以捕获到 panic 的输入值,并且恢复正常的执行
-
判断go的struct是否为空
type tests struct {
Name string
Id int
S ss
}
type ss struct {
cc string
}
//Method1: reflect IsVaild
s := tests{}
fmt.Println(reflect.ValueOf(s.S).IsValid())
//空时返回true
//Method2:
if s.S == (ss{}) {
fmt.Println("is nil")
} else {
fmt.Println("isn't nil", s.S)
}
-
判断相等:简单类型可以用==来判断,slice、map和struct等需要用reflect.DeepEqual()来判断。
-
可以用==来比较两个空接口类型变量,但仅限于接口底层类型一致且不包含slice、map等引用类型。
-
当需要init一个包 但未调用其函数时,可以采用如下方式:
import _ "github.com/xxx/xx"
- 依赖管理
go mode init [moudule name]
go mode build ./... //当前目录下的所有子文件中的go文件
go get
go mode tidy
- 目录整理 每个含main文件的go文件必须放到自己单独的目录里
go build ./... //成功后并不会产生结果,而只是检测编译是否通过
go install ./... //在%GOPATH%/bin中查看结果
go env GOPATH
cd %GOPATH%/bin