V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nickname
V2EX  ›  问与答

关于 go import 自定义包的问题

  •  
  •   nickname · 2017-09-04 12:17:43 +08:00 · 4186 次点击
    这是一个创建于 2628 天前的主题,其中的信息可能已经有所发展或是发生改变。

    工程目录

    Myproject
    ---.idea
    ---scr
       ---cmd
          ---cmd.go
       ---test
          ---test.go
    

    ###POPATH 与 GOROOT

    GOPATH="/Users/road/IdeaProjects/Myproject"
    GOROOT="/usr/local/go"
    

    cmd.go

    package cmd
    
    import (
    	"flag"
    	"fmt"
    	"os"
    )
    
    /*
    	jaca [-option] class [args...]
    */
    type Cmd struct {
    	HelpFlag bool
    	VersionFlag bool
    	CpOption string
    	Class string
    	Args []string
    }
    
    func ParseCmd() *Cmd  {
    	cmd := &Cmd{}
    	flag.Usage = PrintUsage
    	flag.BoolVar(&cmd.HelpFlag,"help",false,"print help message")
    	flag.BoolVar(&cmd.HelpFlag,"?",false,"print help message")
    	flag.BoolVar(&cmd.VersionFlag,"version",false,"print version and exit")
    	flag.StringVar(&cmd.CpOption,"cp","","classpth")
    	flag.StringVar(&cmd.CpOption,"classpath","","classpath")
    	flag.Parse();
    }
    
    func PrintUsage()  {
    	fmt.Println("Ussge: %s [-option] class [args...]\n",os.Args[0])
    }
    
    

    test.go 无法调用 cmd.go 中相关函数,如下 command:=&Cmd{}失败

    package main
    
    import (
    	"cmd"
    )
    func main()  {
    	command := &Cmd{} //提示 unresolved type 'Cmd'
    }
    
    
    5 条回复    2017-09-04 19:08:45 +08:00
    sryanyuan
        1
    sryanyuan  
       2017-09-04 14:57:22 +08:00
    command := &cmd.Cmd{}
    nickname
        2
    nickname  
    OP
       2017-09-04 16:21:44 +08:00
    @sryanyuan 这样写还是不行,感觉是 import"cmd"并没有将自定义的 cmd 包导入到 test.go 中
    sryanyuan
        3
    sryanyuan  
       2017-09-04 16:31:22 +08:00
    Myproject (GOPATH)下的 scr 是打错了?理论上应该是 src
    命令行里直接
    ```
    export GOPATH=/Users/road/IdeaProjects/Myproject
    go install test

    ```
    nickname
        4
    nickname  
    OP
       2017-09-04 16:43:24 +08:00
    @sryanyuan 是我敲错了,工程里是 src 没问题的
    ```
    can't load package: package test: cannot find package "test" in any of:
    /usr/local/go/src/test (from $GOROOT)
    /Users/road/IdeaProjects/Myproject/src/test (from $GOPATH)```
    nickname
        5
    nickname  
    OP
       2017-09-04 19:08:45 +08:00
    在 StackOverflow 问了一下,标准库已经有一个同名的 cmd 包,跟我自定义的 cmd 包命名有冲突,我尝试改了名字,现在正常了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5800 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:29 · PVG 11:29 · LAX 19:29 · JFK 22:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.