关于 go import 自定义包的问题

2017-09-04 12:17:43 +08:00
 nickname

工程目录

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'
}

4062 次点击
所在节点    问与答
5 条回复
sryanyuan
2017-09-04 14:57:22 +08:00
command := &cmd.Cmd{}
nickname
2017-09-04 16:21:44 +08:00
@sryanyuan 这样写还是不行,感觉是 import"cmd"并没有将自定义的 cmd 包导入到 test.go 中
sryanyuan
2017-09-04 16:31:22 +08:00
Myproject (GOPATH)下的 scr 是打错了?理论上应该是 src
命令行里直接
```
export GOPATH=/Users/road/IdeaProjects/Myproject
go install test

```
nickname
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
2017-09-04 19:08:45 +08:00
在 StackOverflow 问了一下,标准库已经有一个同名的 cmd 包,跟我自定义的 cmd 包命名有冲突,我尝试改了名字,现在正常了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/387997

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX