为何import不支持相对路径?

这个设定感觉很奇怪,感觉以Google的实力,做到支持相对路径应该是很容易的。

而且这样的话,在许多场合下都很方便。尤其是程序移植。

Google是基于什么考虑,设定import内不支持相对路径的呢?

共 6 个回复


jimmykuu

src
  foo
    foo.go
    bar
  bar

这种文件夹方式,你在 foo.go 中 import "bar" ,如果支持相对路径的话,那么优先使用 foo/bar 这个 package ,但是会造成困扰,按照 Go 从工程角度出发,那弊大于利。

# 0

snake117

go支持啊,比如

import "./xxx"

这就是相对路径的方法,可以类比C++的include<>和include""。

注意,go的相对路径不允许引用当前目录外部的库。只能引用内部的库。

# 1

co6co

本人也同意 不知道基于什么考虑的
#0 说的问题 我觉得不存在 引用 bar 的时候:

  1. 全局 import "bar"
  2. 当前 import "./bar"
  3. 上级 import "../bar"
    这样似乎没有什么冲突吧?
# 2

co6co

#1 所说的 import './xxx'
在我使用的IDE 中也是不支持的
main.go:15:2: local import "./xxx" in non-local package

# 3

shuangbujiao

支持一下#1的说法,go import支持相对路径;
具体看我学习go语言实现的项目:
https://github.com/SOMING2017/go-master
#3 所说不支持,可能有二:
1.IDE不支持;
2.go旧版;
我使用的编辑器不是IDE,版本是1.12.5

# 4

rocket

mod 模式支持直接引用子目录的,不用加点,例如在 project1中首先运行:

go mod init project1

目录结构:
project1包含子目录 child1child2

引用他们只需:

import (
   "project1/child1"
   "project1/child2"
)
# 5