golang为什么不推荐使用相对路径来import
go可以使用相对路径,import "../somepkg"这种语法可以通过编译。
但是请考虑一种情境,假设现在工程目录下四级有一个go文件需要引入工程目录下一级的包,如果使用相对路径,这样写:
import "../../../pkg"
用$GOPATH,则这样写:
import "project/pkg"
你觉得哪种可读性更强?
另外,不同路径的源文件,如果引用工程中同一个package,用$GOPATH,都是一样的:
import "project/pkg"
用相对路径则可能不同:
import "../pkg" (pkg下一级源文件)
import "../../pkg" (pkg下两级源文件)
Golang-go mod 导入本地包
mian.go调用名为"pk"的包
所有文件都在项目目录"projectfile"下,其中本地包"pk"的文件在"package"目录下。
使用go mod进行依赖包的管理,因此注意项目根目录下是否有go.mod,没有的一定要先go mod init 项目名称。
import引用时,go.mod把所在目录作为根目录,填写路径时把相对路径写在s5后面。
golang如何创建目录
golang中关于目录与文件名等操作都在os这个包中,具体的创建目录都是通过Mkdir和MkdirAll这2个函数来实现的,这两个函数用法一致
os.Mkdir(dirName string, perm FileMode)
dirName即要创建的目录(文件夹路径),可以是绝对路径,也可以是相对路径(相对于GOPATH)
perm表示创建的目录的权限,如0777(读r权限值为4,写权限w值为2,执行权限x值为1)
如:我要在/data/program/goapp这个目录下创建一个golang这个子目录,示例如下:
package main
import (
"os"
"fmt"
)
func main() {
err := os.Mkdir("/data/program/goapp/golang", 0666)
if err != nil {
fmt.Println(err)
}
}
注:Mkdir和MkdirAll的区别
Mkdir创建目录,它的父级目录必须是存在的,不然创建会失败
MkdirAll可以递归创建目录,即只要根目录存在即可,如下:
err := os.MkdirAll("/data/program/goapp/golang/test/hello", 0766)
if err != nil {
fmt.Println(err)
}
本例中:/data/program/goapp是已经存在的目录,而子目录golang/test/hello是不存在,此时要使用MkdirAll来创建
go模板文件引入js路径问题
Go语言模板文件可以引入js文件或css文件,但是在引入的过程中,需要注意以下几点:
1. 引入的文件路径应该是相对路径,而不是绝对路径。
2. 在引入js文件时,需要使用{{ url }} 模板函数,用来拼接路径, 这样可以更好的兼容不同的路径。
3. 如果是在统一的文件夹中的js文件,最好使用{{ static }}模板函数,这样可以更好的节省路径长度。
4. 在引用js文件时,需要在页面底部,可以使用{{ template }}模板函数,这样可以保证js文件在页面加载完成之前就被加载。
总之,使用Go语言模板文件引入js文件,需要注意路径的相对性,并且使用模板函数来拼接路径,这样可以更好的兼容不同的路径,从而保证引用js文件的正确性。