项目结构如下:
decoder
├── config.json
└── decoder.go
config.json 文件内容
{
"ServerInfo": {
"Host": "127.0.0.1:8888"
},
"RedisInfo": {
"Host": "127.0.0.1:6379",
"MaxIdle": 16,
"MaxActive": 0,
"IdleTimeout": 300
}
}
decoder.go 文件内容
package main
import (
"encoding/json"
"fmt"
"os"
"time"
)
type Config struct{}
type ConfigurationType struct {
ServerInfo ServerInfoType
RedisInfo RedisInfoType
}
type ServerInfoType struct {
Host string
}
type RedisInfoType struct {
Host string
MaxIdle int
MaxActive int
IdleTimeout time.Duration
}
var Configuration = ConfigurationType{}
func (this Config) InitConfig() {
file, _ := os.Open("config.json")
defer file.Close()
decoder := json.NewDecoder(file)
Configuration = ConfigurationType{}
err := decoder.Decode(&Configuration)
if err != nil {
fmt.Println("Error: ", err)
}
fmt.Printf("Configuration: %v\n", Configuration)
}
func main() {
conf := Config{}
conf.InitConfig()
}
这种情况下我运行:go run decoder.go
, 输出结果如下:
Configuration: {{127.0.0.1:8888} {127.0.0.1:6379 16 0 300ns}}
但是我把这个 main 包改为 decoder 包,项目结构调整如下
.
├── decoder
│ ├── config.json
│ └── decoder.go
└── main.go
config.json 文件内容
{
"ServerInfo": {
"Host": "127.0.0.1:8888"
},
"RedisInfo": {
"Host": "127.0.0.1:6379",
"MaxIdle": 16,
"MaxActive": 0,
"IdleTimeout": 300
}
}
decoder.go 文件内容
package decoder
import (
"encoding/json"
"fmt"
"os"
"time"
)
type Config struct{}
type ConfigurationType struct {
ServerInfo ServerInfoType
RedisInfo RedisInfoType
}
type ServerInfoType struct {
Host string
}
type RedisInfoType struct {
Host string
MaxIdle int
MaxActive int
IdleTimeout time.Duration
}
var Configuration = ConfigurationType{}
func (this Config) InitConfig() {
file, _ := os.Open("config.json")
defer file.Close()
decoder := json.NewDecoder(file)
Configuration = ConfigurationType{}
err := decoder.Decode(&Configuration)
if err != nil {
fmt.Println("Error: ", err)
}
fmt.Printf("Configuration: %v\n", Configuration)
}
main.go 文件内容
package main
import "initTest/decoder"
func main() {
t := decoder.Config{}
t.InitConfig()
}
测试运行 go run main.go
报错如下:
Error: invalid argument
Configuration: {{} { 0 0 0s}}
请问是否有人知道是什么原因?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.