【已解决】GO语言开发中调用另一个库报错 cannot refer to unexported name XXXX
问题:
在一个.go文件中定义一个reverse方法用来反转给定的字符串
包路径为:E:\goproject\src\ynhmonster.com\user\stringutil
package stringutil func reverse(s string) string { r := []rune(s) for i, j := 0, len(r) - 1; i < len(r) / 2; i, j = i + 1, j -1 { r[i], r[j] = r[j], r[i] } return string(r) }
然后在另一个.go文件中调用reverse方法
包路径为:E:\goproject\src\ynhmonster.com\user\main
package main import ( "fmt" "ynhmonster.com/user/stringutil" ) func main(){ fmt.Printf(stringutil.reverse("Hello World!")) }
报错:cannot refer to unexported name stringutil.reverse
解决:
原因:Go模块中要导出的函数,首字母必须大写。
当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
将定义函数中的reverser改为Reverse,然后在引用该函数的地方改成Reverse,即可解决。
没有出现错误信息。
然后去bin目录去运行:
问题成功解决。