wechaty/go-wechaty

[为啥 程序不能从环境变量读取?]

Ran-Xing opened this issue · 8 comments

之前我在终端设置过了环境变量,以为 在程序里面设置也可以,但是我刚刚退出程序重新进入才发现,程序里面设置的环境变量压根没有用,我不理解,你们这也太。。。
人都麻了,我不理解,连os.Setenv 都不能读取到吗?
image
image

os.Setenv(key, value)

有点搞心态。。。

为什么要在 go 程序里再设置环境变量?直接终端设置不就行啦

为什么在程序里设置不行,是因为 go-wechaty 在 init 里已经读取环境变量了,你要确保你设置的环境变量先与 init

@dchaofei 感觉这代码有玄学,我刚刚还不行,截图你也看到了,我现在又行了,我人已经麻了

我太不理解为什么要在程序里再设置一遍环境变量,要么是从程序外部设置环境变量,要么再程序里直接使用 option

	var bot = wechaty.NewWechaty(wechaty.WithPuppetOption(wp.Option{
		Token:    "xxx",
	}))

不是有新的参数吗?
wechaty_puppet_service_token
这个设置不了啊,兄弟

不是有新的参数吗? wechaty_puppet_service_token 这个设置不了啊,兄弟

目前传递 token 有两种方式:
1、通过外部设置环境变量 WECHATY_PUPPET_SERVICE_TOKEN=xxx
2、在程序内部 NewWechaty 时传递 token

image

@dchaofei ,我的变量的确是在 init 里面设置的,在go的规则里面,会优先执行 导入的包里面的init函数,所以 最外面的init函数是最后被执行的,上面这个截图我已经取消了设置 token的操作,同时设置了 Endpoint 参数,但是貌似没有用哦! 同时,我现在的 token又失效了
var (
	err     error
)
func init() {
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath(".")
	if err = viper.ReadInConfig(); err != nil {
		log.Printf("%v读取配置文件失败%v", os.Getenv("faild"), err)
	} else {
		viper.Set("success", success)
		viper.Set("faild", faild)
		viper.Set("info", info)
		viper.Set("rootPath", rootPath)
		setEnv("WECHATY_PUPPET", viper.GetString("Wechaty.WECHATY_PUPPET"))
		setEnv("WECHATY_LOG", viper.GetString("Wechaty.WECHATY_LOG"))
		setEnv("WECHATY_TOKEN", viper.GetString("Wechaty.WECHATY_TOKEN"))
		setEnv("WECHATY_PUPPET_SERVICE_TOKEN", viper.GetString("Wechaty.WECHATY_PUPPET_SERVICE_TOKEN"))
		setEnv("WECHATY_PUPPET_SERVER_PORT", viper.GetString("Wechaty.WECHATY_PUPPET_SERVER_PORT"))
		setEnv("WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER", viper.GetString("Wechaty.WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER"))
	}
}

func setEnv(key, value string) {
	if err = os.Setenv(key, value); err != nil {
		log.Printf("%v设置环境变量失败%v", os.Getenv("faild"), err)
		return
	}
}

func main() {
	fmt.Println(os.LookupEnv("WECHATY_PUPPET"))
	var bot = wechaty.NewWechaty()
}

希望您指点一下,每次都设置环境变量好麻烦哦,不如写到配置文件里面,所以我才在代码里面设置写入环境变量的操作

用 endpoint 也是需要 token 的,你要同时设置 endpoint 和 token

	var bot = wechaty.NewWechaty(wechaty.WithPuppetOption(wp.Option{
		Token:    "xxx",
		Endpoint: "xxxx"
	}))