[为啥 程序不能从环境变量读取?]
Ran-Xing opened this issue · 8 comments
Ran-Xing commented
Ran-Xing commented
os.Setenv(key, value)
有点搞心态。。。
dchaofei commented
为什么要在 go 程序里再设置环境变量?直接终端设置不就行啦
为什么在程序里设置不行,是因为 go-wechaty 在 init 里已经读取环境变量了,你要确保你设置的环境变量先与 init
dchaofei commented
我太不理解为什么要在程序里再设置一遍环境变量,要么是从程序外部设置环境变量,要么再程序里直接使用 option
var bot = wechaty.NewWechaty(wechaty.WithPuppetOption(wp.Option{
Token: "xxx",
}))
Ran-Xing commented
不是有新的参数吗?
wechaty_puppet_service_token
这个设置不了啊,兄弟
dchaofei commented
不是有新的参数吗? wechaty_puppet_service_token 这个设置不了啊,兄弟
目前传递 token 有两种方式:
1、通过外部设置环境变量 WECHATY_PUPPET_SERVICE_TOKEN=xxx
2、在程序内部 NewWechaty 时传递 token
Ran-Xing commented
@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()
}
希望您指点一下,每次都设置环境变量好麻烦哦,不如写到配置文件里面,所以我才在代码里面设置写入环境变量的操作
dchaofei commented
用 endpoint 也是需要 token 的,你要同时设置 endpoint 和 token
var bot = wechaty.NewWechaty(wechaty.WithPuppetOption(wp.Option{
Token: "xxx",
Endpoint: "xxxx"
}))