Golang 路径问题

Golang 路径问题 no such file or directory

config.xml就在config包中

package config

import (
	"bufio"
	"os"
)


func Config() (cfg string,err error){
	f, err := os.Open("config.xml")
	if err != nil {
		return
	}
	r := bufio.NewReader(f)
	cfg,err = r.ReadString('\n')
	return 
}

在同一个包下做测试,结果和预期一样

package config

import (
	"fmt"
	"io"
	"testing"
)


func TestConf(t *testing.T) {
	cfg, err := Config()
	if err != nil && err != io.EOF {
		t.Error(err)
	}
	if cfg == "" {
		t.Error("文件没有内容")
	}
	fmt.Printf("cfg: %v\n", cfg)
}
cfg: 这是一个配置文件
PASS

但在另一个包下,却出现

open config.xml: no such file or directory
cfg: 
package main

import (
	"fmt"
	"io"
	"src/src/fileproblem/config"
)

func main(){
	cfg, err := config.Config()
	if err != nil && err != io.EOF {
		fmt.Println(err)
	}
	fmt.Printf("cfg: %v\n", cfg)
}

在Config中加入 fmt.Println(filepath.Abs(“./”)) 打印绝对路径

....../src/fileproblem/config 
....../src/fileproblem/package1

可以发现谁调用,路径就是谁的。这也就是为什么在不同的包下会出现no such file or directory问题了

如何解决

在window中可以尝试用以下函数,得到执行时的绝对路径

filepath.Abs("./")
os.Executable()

然后对路径进行公共目录切片,这里可以用“/src”或“//fileproblem”

pathfile := strings.Split(AbsPAath,"/fileproblem")

最后拼接配置文件的相对路径

filepath.Join(s,"/fileproblem/config/config.xml")

完整代码

func Config() (cfg string, err error) {
	AbsPAath, _ := os.Executable()
	pathfile := strings.Split(AbsPAath, "/fileproblem")
	f, err := os.Open(filepath.Join(pathfile[0], "/fileproblem/config/config.xml"))
	if err != nil {
		return
	}
	r := bufio.NewReader(f)
	cfg, err = r.ReadString('\n')
	return
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值