zoukankan      html  css  js  c++  java
  • 使用go搭建一个简单的web服务器(1)

    编译运行下面的代码后,在浏览器中测试下面的url,然后看服务端输出的效果:

    http://127.0.0.1:9090/
    
    http://127.0.0.1:9090/?name=test&age=25
    
    http://127.0.0.1:9090/?name=test&age=25&url_long=helloserver
    
    http://127.0.0.1:9090/?name=test&age=25&url_long=helloserver&url_long=othertest
    
    package main
    
    import (
        "fmt"
        "log"
        "net/http"
        "strings"
    )
    
    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("value:", strings.Join(v, ","))
        }
        fmt.Fprintf(w, "hello, welcome you!") //这个字符串写入到w中,用于返回给客户端。
    }
    func main() {
        http.HandleFunc("/", sayhelloname)       //设置访问的路由
        err := http.ListenAndServe(":9090", nil) //设置监听的端口
        if err != nil {
            log.Fatal("ListenAndServe: ", err)
        }
    }

    在go语言中,url请求的参数key-value键值对中,值value是用slice存储的。strings.Join方法是用于将元素类型为 string 的 slice 使用分割符号来拼接组成一个字符串

    fmt.Fprintf() 函数的实际签名是:
    func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
    其不是写入一个文件,而是写入一个 io.Writer 接口类型的变量,下面是 Writer 接口在 io 包中的定义:
    type Writer interface {
    Write(p []byte) (n int, err error)
    }
    fmt.Fprintf() 依据指定的格式向第一个参数内写入字符串,第一参数必须实现了 io.Writer 接口。Fprintf() 能够写入任何类型,只要其实现了 Write 方法。

    人生短,迷茫路一程又一程。 脚步重,雨雪天踟蹰也踟蹰。 滴水聚,久无成效伊人不见。 该如何,敲击敲击昼夜不停。
  • 相关阅读:
    clickhouse集群部署
    zookeeper集群部署
    linux下安装多路径multipath
    采用xtrabackup部署主从同步(生产)
    部署dg备库同步ogg
    goldengate同步(主库rac从库单节点)
    python3发送邮件
    python2发送邮件
    pip版本过高导致报错
    ERROR 1558 (HY000): Column count of mysql.user is wrong
  • 原文地址:https://www.cnblogs.com/DesignerA/p/11550276.html
Copyright © 2011-2022 走看看