还是包的问题


目录结构是这样的。
假如我要在main里调用article.go或user.go
我只要引用

import "pojo"

这样就能访问user.go里的func
可是为什么不能访问article.go里的func呢?
user.go和article.go的package都是pojo

package pojo

这种情况我该怎么办呢?

共 6 个回复


stevewang

函数名必须大写字母开头才可以导出包外。

# 0

diarbao

已经是大写的。

# 1

diarbao

package main

import (
    "pojo"
)

func main() {
    pojo.GetUserName()
    pojo.TestReadArticle()
    pojo.TestHas()
}

package pojo

import (
    "fmt"
)

func TestReadArticle() {
    fmt.Println("is read")
}
func TestHas(){
    fmt.Print("dd")
}

package pojo

import "fmt"

type user struct {
    Id       int
    Name     string
    Password string
    Age      int
    // Dept
}

func GetUserName() {
    fmt.Println("aaaa")
}
func TestReadUser() {
    fmt.Println("aaaa")
}

代码是这样的。代码结构跟上图一样。哪的问题呢
运行提示

src\testMain.go:9: undefined: pojo.TestReadArticle
src\testMain.go:10: undefined: pojo.TestHas

刚发现 如果把引入改为

import "./pojo"

就可以,难道如果用绝对路径就不行么?
我的gopath设置只有一个。就是当前工作目录

# 3

diarbao

弄明白原因了。
一开始使用gosublime run的时候 在pkg下面生成了.a文件。
但是由于每次更新pojo里面的包 都要手动去build一下。所以就放弃了gosublime。换别的ide的时候 pkg下的已生成的.a没有清除,所以调用的还是那个.a。后来删除pkg下.a文件就好了。

还有一个问题。为什么使用相对路径引用没问题呢。就可以找到方法。唉。
不过总算找到一个解决办法了。还有一个现象就是。
在网上别人说。go其实使用的是源文件。
但是在我这里不是。
比如我生成 user.a以后 如果更改user.go的话。数据还是user.a的
我不知道是只有我有这个现象还是网上说的错误的。

# 4

jimmykuu

你的 main 文件放在一个包里,比如

src
    - main
        - main.go

这样 import "pojo" 没问题的,否则可能会有莫名其妙的问题。

# 5