499689317 / notes

note
2 stars 0 forks source link

golang环境 #37

Open 499689317 opened 2 years ago

499689317 commented 2 years ago

22/08

08/29

gvm管理golang工作区间

创建新文件夹 mkdir ~/Document/workspace

在workspace目录下执行 gvm pkgset create —local // 将当前GOPATH切换到workspace目录下 gvm pkgset use —local // 将当前GOPATH切换到当前gvm版本下 gvm pkgset use global 改变当前GOPATH路径

08/30

启动服务

本地docker启动redis与mysql environment分支下:

  1. 重新编译cmd/format.go
  2. Mysql拉取8.0.29版本镜像,其它版本有可能找不到镜像
  3. 执行deploy脚本生成mysql构建脚本并启动容器
  4. redis同上 Match-3-pangu-v2分支下:
  5. 更改conf/development/mysql.yaml,将用户名改为当前数据库用户名
  6. 更改config/development.yaml的DbDsn mysql连接地址
  7. 执行script/pull_config拉取Server_V2_Config项目,执行时带上dev环境变量

08/31

Viper配置管理库 Time.Sub方法:

Casual-server-lib

  1. 读取启动参数
  2. viper初始化项目基本配置,环境变量
  3. 初始化log
  4. 初始化mysql
  5. 初始化redis
  6. flowcontrol流量控置 Match-3-pangu-v2
  7. internal/def定义了相关全局变量及一些业务数据结构
  8. confmanager定义了项目业务相关数据配置表编解码逻辑
  9. loadCvs与preTable

Git本地忽略特定文件或目录,与.gitignore不同,当文件被其他人更新后,还是会被拉取。使用.gitignore是最保险的方式 git update-index —assume-unchanged filename,执行忽略 git update-index —no-assume-unchanged filename,取消忽略 如: git update-index —assume-unchanged ./.gitignore git update-index —no-assume-unchanged ./.gitignore

499689317 commented 2 years ago

22/09

09/01

Vscode配置拓展插件与开发工具 安装google Go插件 安装工具包:Go:install/Update Tool

注:Vscode导入工程项目时不要把整个workspace添加进来,会引发import错误,将工程项目单个添加到vscode中。

Vscode配置断点调试 运行与调试中选择需要调试的项目 在该项目下生成.vscode的launch.json文件,配置该文件

golang执行单个测试方法 go test -v xxx.go -test.run method

09/02

Gin.Context -> TContext

DataManager&HttpHeader TContext本身不继承context.Context,只是一个挂载了大量上下文的管理器 TContext中初始化当前操作的Operation对象 有一个UpdateCache???

Service:逻辑层

定义了操作对象内存数据的一系列逻辑方法

Model: 数据层

Auto中定义了操作model层Operation对象 定义了一系列操作数据的recordList指令,用做Commit同步数据

09/07

protobuff设置

安装:go install google.golang.org/protobuf/cmd/protoc-gen-go@latest 会默认安装到$GOPATH/bin目录下 生成Go Code:protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/*.proto

.proto文件声明可以被option注解,option可以是文件级别也可以在消息体内

option optimize_for SPEED|CODE_SIZE|LITE_RUNTIME 这3种配置分别生成的消息类文件在性能解析或文件大小上有差异,一般配置SPEED即可

option go_package “custompackage” 文件生成的Go Code都会在这个包下

Github公有库迁到私有库,或者拉取私有库需要另外添加git账号的personal access token到~/.netrc文件下

09/08

vscode在执行go test时会缓存之前的结果 在testTags设置项中 [“-v “,“-count=1”]可以每次都让vscode不执行之前的缓存结果

09/13

Stings.Split(“”,”,”)会返回一个包含一个空字符串的数组

09/14

开发分支更新 拉取开发分支最新代码:go get 仓库地址@分支名称

09/15

Golang错误处理时,可以将业务数据都初始化一个默认值,某些情况下,默认值可以替换部份的错误处理

09/19

  1. conf目录下创建对应环境mysql,redis连接配置,连接地址是docker子网下的ip与端口
  2. config目录下创建对应环境配置,维护老代码mysql,redis连接相关配置,与conf目录下连接地址保持一致即可
  3. 根目录创建对应环境docker构建文件docker-compose-*.yaml,将network域改为对应宿主机上自定义创建的子网名,设置宿主机与容器端口映射关系,log目录映射,容器ip等相关

09/20

错误处理 通过errors库或fmt标准库创建一个error errors.New(“string”) fmt.Errorf(“string: %+v”, “value”)

预定义error处理错误 var SomeThingError = errors.New(“Some thing is error”) 通过比较error与SomeThingError是否相等(err == SomeThingError)来做判断处理 弊端:预定义错误会在导出函数中返回,所以预定义错误本身也需要导出,增加维护成本

自定义错误 实现Error接口方法,通过判断错误类型来处理error,同样跟预定义错误一样,需要将错误类型暴露给外部,可以通过暴露判断错误的方法来解决。

09/27

struct组合

  1. struct与struct组合,相当于a struct包含b struct所有方法与字段
  2. struct包含struct对象,与1不同,相当于b struct的对象作为a struct的成员
  3. struct与interface组合,struct实现interface方法,则相当于struct实现了该接口