go 书写被依赖模块的代码
目录结构如下
代码
package greetings
import "fmt"
func Hello(name string)string{
message:=fmt.Sprintf("Hi,%v. welcome!",name);
return message;
}
书写调用端代码
入目结构如下
代码
package main
import (
"fmt"
//引入依赖
"example.com/greetings"
)
func main(){
fmt.Println(greetins.Hello("fpp"))
}
疑问
这样能否调用成功呢?看执行结果
看提示说是找不到依赖 说明这样引入依赖还不行
个人猜测: go是通过 go.mod来管理依赖的 如果没有在这里声明是找不到依赖的。
正确的方式:
将模块当中的目录路由到本地文件系统目录 这个应该是告诉go所依赖的 go.mod和go代码在哪里
go mod edit -replace example.com/greetings=…/greetings
执行完成之后 go.mod文件产生如下变化 多了一行
此时还不能起作用 还需要使用 go mode dity
同步一下 从go的体系当中真正的拿到依赖
执行完成之后 go.mod文件产生如下变化 多了一行
由版本号和 一串数字 这个数字应该是一个地址或者索引(在go语言体系当中)
官网说
使用这个命令是 发现所依赖的代码,并且在hello.go中使用导入这个这个包时,依赖就会被创建
查看执行结果 成功执行
如果在同一个目录下能找到依赖吗?或者需要导入包吗
同目录下的不是 main函数的go 代码怎么写呢?
我猜测 应该和同目录声明的目录一致,猜测根据是同目录下只能有一个mod文件 所以同目录下的go
应该只能使用已声明的module example.com/hello
验证一下
代码
package hello
import "fmt"
func Hello(name string)string{
message:=fmt.Sprintlf("hi %v welcome",name);
return message;
}}
那 hello.go 怎么去引用当前目录下的代码呢?
猜测不用导入 直接使用 代码如下
package main
import (
"fmt"
)
func main(){
fmt.Println(Hello("fpp"))
}
发现不行 报错了 找不到Hello这个方法
修改一下代码试试
package main
import (
"fmt"
"example.com/hello"
)
func main(){
fmt.Println(Hello("fpp"))
}
发现还是不行
再猜是不是 test.go不用写package hello这个 修改一下代码试试
test.go如下
import "fmt"
func Hello(name string)string{
message:=fmt.Sprintlf("hi %v welcome",name);
return message;
}
发现也不行 难道只能 package main吗修改一下代码试试
test.go如下
package main
import "fmt"
func Hello(name string)string{
message:=fmt.Sprintlf("hi %v welcome",name);
return message;
}}
hello.go如下
package main
import (
"fmt"
)
func main(){
fmt.Println(Hello("fpp"))
}
还是不行咋回事呢?难道是hello.go 中要用 test.Hello才能获取到 修改一下代码试试
hello.go如下
package main
import (
"fmt"
)
func main(){
fmt.Println(test.Hello("fpp"))
}
发现这种方式才能运行
也就是说得两个文件一起跑 上面运行方式,编译器并不把两个文件当一个包运行
代码如下
test.go
package main
import "fmt"
func Hello(name string)string{
message:=fmt.Sprintlf("hi %v welcome",name);
return message;
}
hello.go
package main
import (
"fmt"
)
func main(){
fmt.Println(Hello("fpp"))
}
总结
-
不同目录下的模块要想引用 必须要在mod文件当中建立引用
- 使用 go mod edit --replace 声明包的路由
- 使用 go mod dity 建立真正的依赖 能够使用
-
相同目录下的模块要想引用 运行时得带上所依赖的文件 类似 这样 go run hello.go test.go 或者设置成工程目录,也可以运行 这个工程目录后面再探究
-
相同目录下的 go文件 package必须一样