技术问题
1、我想在cli的函数中给wsc对象的某个属性赋值
考虑以下三种方案:
- 回调:需要把函数作为参数。这个匿名函数的参数不可修改,而且是来自控制台输入,没办法。
- context:把context本身作为参数传递,context里面放wsc对象。还是改不了参数,没办法。
- 全局:由于有多处调用,都需要相同的根wsc。只能全局了,把wsc声明为全局变量。
- 要么是wsc的设计不合理,考虑不同的动作是否应该设计到同一个结构体上?
- 要么wsc应该设置为全局指针,像*DB一样!
 
var connCmd = &cobra.Command{
	Use:   "conn [addr]",
	Short: "连接服务器",
	Long: `指令用法:
	conn 127.0.0.1:8888    和服务器建立ws连接,地址格式"127.0.0.1:8888",超时时间单位是s
	-to, --timeout int          超时时间,单位s,默认是5s【简写只能是一个字母吗?可以是两个吗 to?】
	`,
	Args: cobra.MinimumNArgs(1),
	Run: func(cmd *cobra.Command, args []string) {
		wsc := service.NewVTVLMsg(args[0], global.API_CONN, timeout)
		wsc.Start()
	},
}
怎么使用context,怎么使用回调?
语言问题
1、import cycle not allowed
go语言不允许循环引用
我的global包中,用到了service的结构体指针对象
而service中,又用到了global中的全局对象,必然是循环了!
解决方案:
在项目再加一层 package c
怎么折腾service都不行,问题出在global,而非service。
最根本原因是:service的东西不能放到global里面,范围太大了!
global里面只放外部可直接用的包,例如:
package global
import (
	"go.uber.org/zap"
	"general_server/config"
	"general_server/utils/IotDBClient"
	"github.com/go-redis/redis"
	"github.com/spf13/viper"
	"gorm.io/gorm"
)
var (
	GVA_DB     *gorm.DB
	GVA_REDIS  *redis.Client
	GVA_IotDB  *IotDBClient.IotDBClient
	GVA_CONFIG config.Server
	GVA_VP     *viper.Viper
	GVA_LOG *zap.Logger
)
参考:
https://blog.csdn.net/ZST1158079421/article/details/90234403
            
 
作者:西伯尔            
 
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号