GO语言调用外部函数失败总结

GO

背景

最近准备学习一门新的语言,于是选择了GO, 没想到学了不到半个小时,就遇到一个大坑。 调用外部函数始终失败,折腾了1个多小时,终于摸索清楚了。

废话不多说,下面是我练习的一个目录结构,在其中我在main.go中要调用src/print.go文件中Print函数。 以下内容是我调用过程中所遇到的错误,希望对GO初学者有所帮助。(正确的代码内容在文章最后)

练习的项目结构

@:~/goProject/test.cn$ tree
.
├── go.mod
├── main.go
└── src
    └── print.go
1 directory, 3 files

Q1 导入的是空路径

build command-line-arguments: cannot load /home/vagrant/aaron/goProject/test.cn/src: malformed module path "/home/vagrant/aaron/goProject/test.cn/src": empty path element

main.go

package main
import (
    "/home/vagrant/aaron/goProject/test.cn/src" // 这个路径错误
)
func main(){
    src.Print()
}

Q2 导入的路径不全

vagrant@aaron:~/aaron/goProject/test.cn$ go run main.go
build command-line-arguments: cannot load src: malformed module path "src": missing dot in first path element

main.go

package main
import (
    "src" // 这个路径不全
)
func main(){
    src.Print()
}

Q3 找不到路径

vagrant@aaron:~/aaron/goProject/test.cn$ go run main.go
build command-line-arguments: cannot load test.cn/src: cannot find module providing package test.cn/src

A3

这个失败是在test.cn目录下缺少go.mod文件

Q4 函数不可调用

vagrant@aaron:~/aaron/goProject/test.cn$ go run main.go
# command-line-arguments
./main.go:9:2: cannot refer to unexported name src.Print
./main.go:9:2: undefined: src.Print

main.go

package main
import (
    "test.cn/src"
)
func main(){
    src.Print()
}

A4

这个失败的原因是调用的函数是不是公开的函数,如需让外部调用函数,需要函数名的首字母为大写。

Q5 报错Use as value

vagrant@aaron:~/aaron/goProject/test.cn$ go run main.go
# command-line-arguments
./main.go:9:2: undefined: fmt.Pirintln
./main.go:9:27: src.Print() used as value

print.go

func Print() {
    fmt.Println("I am Print")
    return
}

A5

报错原因是调用的函数没有返回值

最后成功调用的代码展示

go.mod

module test.cn

go 1.13

print.go

package src

import "fmt"

func Print() {
	fmt.Println("I am Print")
	return
}

main.go

package main

import (
	"test.cn/src"
)

func main(){
	src.Print()
}
posted @ 2023-07-02 10:11  烟熏柿子学编程  阅读(127)  评论(0编辑  收藏  举报