Go语言之Goland远程开发和Go基础笔记|青训营笔记

1,931 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

Tips:由于在青训营的项目开发场景中遇到了需要远程开发的需求,因此通过该篇笔记记录如何通过Goland进行远程的Linux环境上Go开发的过程

配置远程Go开发环境

前情提要

  • 需要远程开发的场景:比如Kitex不支持Windows开发
  • 条件:WIndows(本地) + Linux(远程) + SSH能访问到

配置FTPS

  1. 打开Goland,点击Tools,然后找到Deployment,点击Configuration,进入远程配置。

image.png 2. 点 + 号,找到STPF,创建一个好记得名字,最好和远程服务器相关联。

image.png

  1. 选择要连接的SSH,这一步我们选择SSH configuration,因为之前没有配置过,所以点击右边的三个点,进入配置,如下图所示:

image.png 4. 点击+号,创建新的SSH配置,输入相关的信息,如下图所示,需要注意的是这里的用户如果是root,需要去看一下远程服务器是否可以直接通过root登录,如果不行的话还需要在服务器上设置如何通过root直接登录。

image.png

  1. 配置好信息之后,我们点击连接测试,显示成功连接

image.png

6.回到上一步,选中刚才创建的SSH配置,然后选择Mapping,我们来配置本地和远程的文件映射路径,下图中,上面是本地项目的路径,下面是要同步上传到服务器的路径。

image.png

  1. 配置完成之后,我们在本地修改代码之后点击Tools,选择第一个同步(Upload to Default Server),或者直接设置为自动同步(AutoMatic Upload)

image.png

一些小问题

  • 如果ssh不是root用户,需要通过chmod把对应的文件权限给对应用户
  • 右击goland中的文件或文件夹可以选择性上传同步
  • 即使有些代码在本地无法运行,比如Kitex不支持Windows,我们同样可以选择把对应的依赖都下下来,主要是为了goland的智能提示
  • 在远端同步完成后如果依赖库有变动,记得要执行go mod tidy

Go语言的一些基础知识笔记

  1. switch可以替代if else

  2. slice用make初始化的时候,make([]type,len,cap),会初始化len个默认变量

  3. 建议用时间戳初始化随机数种子

  4. string和number类型的转换

  5. go的多种输入方式:bufio.newreader和fmt.scanf

  6. 在fmt.Errorf中使用:%w关键字来将一个错误关联到错误链中

  7. errorIs,可以判定错误链上的所有错误是否含有特定的错误

  8. 在错误链上获取特定的错误,使用error.As

  9. recover只能在被defer的函数中调用,只在当前routine中生效。如果当前的 goroutine 陷入panic,调用 recover 可以捕获到 panic 的输入值,并且恢复正常的执行

  10. 判断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)
}
  1. 判断相等:简单类型可以用==来判断,slice、map和struct等需要用reflect.DeepEqual()来判断。

  2. 可以用==来比较两个空接口类型变量,但仅限于接口底层类型一致且不包含slice、map等引用类型。

  3. 当需要init一个包 但未调用其函数时,可以采用如下方式:

import _ "github.com/xxx/xx"
  1. 依赖管理
go mode init [moudule name]

go mode build ./... //当前目录下的所有子文件中的go文件

go get

go mode tidy
  1. 目录整理 每个含main文件的go文件必须放到自己单独的目录里

go build ./... //成功后并不会产生结果,而只是检测编译是否通过

go install ./... //在%GOPATH%/bin中查看结果

go env GOPATH

cd %GOPATH%/bin