【已解决】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目录去运行:

  

问题成功解决。

 

 

  

posted @ 2018-01-23 16:09  怪人怪性  阅读(875)  评论(0)    收藏  举报