您的位置:首页 > 编程语言 > Go语言

GO学习第三天——自定义包

2013-11-05 00:00 162 查看
呵呵,由于最近有些琐碎事情,所以游戏连续几天都没有写了,但其实这几天都还有抽时间继续在写go的。

由于我是习惯java的变成风格的,所以一时间写go还真的是写的挺慢的,几天才弄了一点东西,除了不熟悉的原因之外,资料少也有很大的影响(不过这归根到底都是我查资料的能力问题吧)。

今天,首先讲一下自定义包。再一上一篇的Hello GO为例子进行修改吧。先看看我修改后的文件路径结构。



HelloGo是我的项目根目录。server.go里面包含了main方法。test是我自定义的包,里面包含了Config.go。注意GO是以包为单位的,Config.go是test包的一部分,这个是我一开始很不习惯的地方。

server.go内容如下

package main

import (
"net/http"
"log"
"./test"
)

func main() {
http.HandleFunc("/",test.SayHelloGO)
err := http.ListenAndServe(":9090",nil)
if err != nil {
log.Fatal("ListenAndServe: ",err)
}
}


Config.go内容如下

package test

import (
"fmt"
"net/http"
"strings"
)

func SayHelloGO(w http.ResponseWriter, r *http.Request) {
r.ParseForm() //解析参数,默认是不会解析的
fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
fmt.Println("path", r.URL.Path)
fmt.Println("scheme", r.URL.Scheme)
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
fmt.Fprintf(w, "Hello GO!")
}


和上一篇的对比一下会发觉其实就是把SayHelloGO方法写到了Config.go那里。值得注意的是方法名从sayHelloGO改成了SayHelloGO,在GO里面规定一个包里面的输出方法需要首字母大写。

现在说一下Config.go吧。首先是package test。报名是所在文件夹的名称。然后import对应的包,把原本在server.go里面的sayHelloGO放大改名为SayHelloGO,放到这里就可以了。

接下来就看看server.go吧。首先要import进自定义的包test。使用import ./test,而不是import ./test/Config.go(上面说过是一包为单位的)。然后把http.HandleFunc("/",sayHelloGO)改为http.HandleFunc("/",test.SayHelloGO)就可以了。

顺便说一下包里面还可以包含另一个包的。在现有基础上加一些东西。



如图,加了一个testAgain包在test下,testAgain里面有一个Print.go的文件。内容如下

package testAgain

import (
"fmt"
)

func Print() {
fmt.Println("OK")
}
然后server.go里面加一句import "./test/testAgain",并且在http.HandleFunc("/",test.SayHelloGO)之前加一句testAgain.Print(),启动server.go,观察控制台就可以发现在启动服务器之前会调用testAgain.Print()方法打印出了OK。

未完,待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  GO 自定义包