64. 幸免main.go文件代码行数过大

会让文件变的很大,文件变的小一些,非阻塞的web服务器,我们先从最基本的程序开始,就像你造房子之前不知道什么是地基一样,除了使用这三个函数来建立一个简单客户端,这三个函数直接实现了http客户端

澳门京葡网站 2

假设事情复杂了,在main里必要带入的HandleFunc之类的就能变的比较多。比方澳门京葡网站 1main函数

关于并发

Hello, world or 你好,世界 or καλημ ́ρα κóσμ or こんにちはせかい

2 使用net/http包

/*** CofoxS* @Author: Jian Junbo* @Email: junbojian@qq.com* @Create: 2018/4/28 10:00* Copyright  2018 Jian Junbo All rights reserved.** Description: */package mainimport ( "net/http" "fmt")// 管理员权限基础列表func pManagerPowerBase(w http.ResponseWriter, r *http.Request) { c := make(chan string) go managerPowerBase fmt.Fprintln(w, <-c)}// 管理员权限基础列表func managerPowerBase(w http.ResponseWriter, r *http.Request, c chan string) { //log.Fatal fmt.Fprintln c <- "月亮月亮我爱你"}

Go是一款静态里语言,特点便是持有极好的产出编程体验。上边是运用Go落成的三个产出,非阻塞的web服务器。

先是大家要打听三个定义,Go程序是通过package来协会的

package main

在 main.go 的 main()函数中,有与上述同类一行代码

代码分析

package main 表示的是包名,必要在文书的首先行表明,package
main那个包名表示go程序是贰个可单独运作的主次,每二个go程序都应有有贰个main为名称的包。
import
导入要求运用到的类库,这里和python已经java都接近。在这之中fmt——Formatting富含了有的格式化的IO操作。
func sayhelloName
在go其中,函数使用func证明,前边跟函数名,然后是参数,go在这之中宣示二个变量的门类的时候会把品种写在背后举例var a int。sayhelloName这么些函数,w的数据类型是http.ResponseWriter,用于响应http。r是四个http.Request指针,用于接受伏乞。
main main()函数
个中http.HandleFunc用于拍卖路由,ListenAndServer用来监听央求。
log log首要用来在命令行状态下输出日志

每三个可单独运作的Go程序,必定富含贰个package
main,在那么些main包中必将包蕴三个入口函数main,而以此函数既未有参数,也尚无重返值。

在Golang中写两个http web服务器大概是有二种方法:

http.HandleFunc("/plateformmanager/powerbase/", pManagerPowerBase) 

代码

    package main

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

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

    func main() {
        http.HandleFunc("/", sayhelloName) //设置访问的路由
        err := http.ListenAndServe(":9090", nil) //设置监听的端口
        if err != nil {
            log.Fatal("ListenAndServe: ", err)
        }
    }

第六行,大家调用了fmt包里面定义的函数Printf。大家能够见到,那么些函数是经过<pkgName>.<funcName>的法子调用的,这点和Python十一分相似。

}

然后新建二个文本 managerPower.go 同样附属 package main

ListenAndServe

下边这一个小服务器通过 ListenAndServe 来监听端口提供劳务,当中使用了至关首要词
go 创造了三个conn。个中go是Go语言个中创制线程的至关重要词,其中go富含了多少个goruntime的协程。在go的线程管理器中协程之间能够透过channel相互通讯,当中使用conn关键词来采纳channel。

为了打字与印刷Hello,
world…,大家调用了一个函数Printf,这一个函数来自于fmt包,所以大家在第三行中程导弹入了系统级其他fmt包:import
“fmt”。

func main() {
http.HandleFunc(“/hello”, SayHello)
http.ListenAndServe(“:8001”, nil)

澳门京葡网站 2分别文件的运作效果

程序

}

与此相类似就把代码分别写在差异的文书中了。维护的时候,依照文件名就很轻巧找到相应的函数了。运营一下看看结果。

前边提到过,包名和包所在的文件夹名可以是不一致的,此处的<pkgName>即为通过package
<pkgName>表明的包名,而非文件夹名。

import (
“net/http”
澳门京葡网站,”io/ioutil”
“fmt”
)