Go开发之对工程的安排处理
在学习开发的过程中,当然是怎么简单明了的学会使用这个技术是最主要的,但是在最终还是要用它来进行实际的工程开发,而实际的工程开发就不可能把所有的代码都写在一个文件里或者一个包里,那应该怎么处理呢?下面就用一个入门的例子来抛砖引玉。这里面其实和GOPATH还是有相当的关系的。
先看一下工程的目录:
这个没有直接建立在GOPATH目录下,而是按照开发习惯专门放置在了一个go_project的工程目录下。上图是整个工程的目录,开发是在WIN10+GO1.74+LITEIDE环境下。
Main.go:
package main
import (
"fmt"
"message/mmsg"
"msg"
)
func main() {
str := mmsg.GetMMsg()
t := msg.Getnum(10)
fmt.Println(t)
fmt.Println(str)
fmt.Println("Hello World!")
}
Mymmsg.go:
// mymmsg
package mmsg
import (
"fmt"
)
func GetMMsg() string {
fmt.Println("Hello---- World!")
return "hello"
}
Mymsg.go:
// mymsg
package msg
import (
"fmt"
)
func Getnum(num int) int {
fmt.Println("Hello++++ World!")
return num + 1
}
这是三个文件的内容,因为是演示工程安排,所以内容非常简单。
然后再在环境变量GOPATH里增加:
也就是上图中的第二行。这里需要注意的是,不要和低版本的WINDOWS一样,用分号分开写到一行里。要一行行的写,在安装JDK时就遇到了这个问题,现象是前面的JAVA命令可以用,但是后面的JAVAC命令不可用,拆开就可以了。
另外一个还需要注意的是,导出的函数和变量开头一定要大写啊,GO没有标识公有和私有的关键字,在这上面耽误了有小半个小时,总是报“golang cannot refer to unexported name xxx.xxx”,不过通过这个又反应出来,VS还是宇宙第一好用的编译器啊。
找了些资料总结一下:
1、 go的package类似于C#的分离文件编译,可以多个文件,但是使用一个包,这样用起来就方便了 。
这样的好处就是变量和函数的引用可以直接操作,不过反过来也容易产生名字冲突啊,这个都需要注意,凡事有利就有弊。
2、go的package的名称尽量和目录保持一致,当然,不一致也不关系,让别人去糊涂呗。其实这里更类似于JAVA的包路径的引用。
3、一个子目录一个包,这个没商量,倒也方便使用。。
4、go的package是以绝对路径GOPATH来寻址的,也就是说都是相对于src目录的,所以如果你没有直接在GOPATH路径下建立工程,最好自己建立src,bin,pkg等目录,这样方便,今天就遇到了这个问题,没有建立,在向环境变量里加了工程路径后,它自动去找src/xxx,也是醉了。
费点时间记下来,省得以后又忘记。
在学习开发的过程中,当然是怎么简单明了的学会使用这个技术是最主要的,但是在最终还是要用它来进行实际的工程开发,而实际的工程开发就不可能把所有的代码都写在一个文件里或者一个包里,那应该怎么处理呢?下面就用一个入门的例子来抛砖引玉。这里面其实和GOPATH还是有相当的关系的。
先看一下工程的目录:
这个没有直接建立在GOPATH目录下,而是按照开发习惯专门放置在了一个go_project的工程目录下。上图是整个工程的目录,开发是在WIN10+GO1.74+LITEIDE环境下。
Main.go:
package main
import (
"fmt"
"message/mmsg"
"msg"
)
func main() {
str := mmsg.GetMMsg()
t := msg.Getnum(10)
fmt.Println(t)
fmt.Println(str)
fmt.Println("Hello World!")
}
Mymmsg.go:
// mymmsg
package mmsg
import (
"fmt"
)
func GetMMsg() string {
fmt.Println("Hello---- World!")
return "hello"
}
Mymsg.go:
// mymsg
package msg
import (
"fmt"
)
func Getnum(num int) int {
fmt.Println("Hello++++ World!")
return num + 1
}
这是三个文件的内容,因为是演示工程安排,所以内容非常简单。
然后再在环境变量GOPATH里增加:
也就是上图中的第二行。这里需要注意的是,不要和低版本的WINDOWS一样,用分号分开写到一行里。要一行行的写,在安装JDK时就遇到了这个问题,现象是前面的JAVA命令可以用,但是后面的JAVAC命令不可用,拆开就可以了。
另外一个还需要注意的是,导出的函数和变量开头一定要大写啊,GO没有标识公有和私有的关键字,在这上面耽误了有小半个小时,总是报“golang cannot refer to unexported name xxx.xxx”,不过通过这个又反应出来,VS还是宇宙第一好用的编译器啊。
找了些资料总结一下:
1、 go的package类似于C#的分离文件编译,可以多个文件,但是使用一个包,这样用起来就方便了 。
这样的好处就是变量和函数的引用可以直接操作,不过反过来也容易产生名字冲突啊,这个都需要注意,凡事有利就有弊。
2、go的package的名称尽量和目录保持一致,当然,不一致也不关系,让别人去糊涂呗。其实这里更类似于JAVA的包路径的引用。
3、一个子目录一个包,这个没商量,倒也方便使用。。
4、go的package是以绝对路径GOPATH来寻址的,也就是说都是相对于src目录的,所以如果你没有直接在GOPATH路径下建立工程,最好自己建立src,bin,pkg等目录,这样方便,今天就遇到了这个问题,没有建立,在向环境变量里加了工程路径后,它自动去找src/xxx,也是醉了。
费点时间记下来,省得以后又忘记。