• http包开发博客01


    项目开始:

    把给你的代码搭建起来。了解大概的一个http服务器是怎么搭建起来的。了解模板渲染  模板方法  链接静态资源如何引用....

    后面gin框架要了解、

    目录

    1:根据下发的代码你可以自己搭建起来。并且运行

    2:如何通过几行代码搭建一个简单的web服务

    3:如何返回json数据格式

    4:如何渲染一个html文档

    5:如何返回静态资源

    6:如何定义模板方法

    7:toml配置如何使用

    一、复制粘贴代码,将代码跑起来

    链接: https://pan.baidu.com/s/16ukDIJzUA3NGCAJZ99Yjog 提取码: w6pw
    --来自百度网盘超级会员v6的分享

    注意点:里面home的结构体要改成HomeResponse。

    文件里面go_stu是我自己已经搭建好了,也可以直接用这个build运行起来。

    二、简单web服务

    package main
    
    import (
    	"fmt"
    	"net/http"
    )
    
    func index(w http.ResponseWriter, r *http.Request) {
    	w.Write([]byte("haha"))
    }
    
    func main() {
    	//通过http创建一个server
    	server := http.Server{Addr: "127.0.0.1:8080"}
    	http.HandleFunc("/", index)
    	if err := server.ListenAndServe(); err != nil {
    		fmt.Println("error")
    	}
    }
    

    是把。很简单的,先定义一个server,然后再定义一个handfunc,如果你不知道index需要上面参数。

    那你点击进HandFunc看看,他要求传参是上面样子的,照着写就可以了。

    三、如何返回json数据

    现在大部分都是什么前后端分离的,那么一般要求返回给前段的格式是json的。

    那如何定义呢?

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"net/http"
    )
    
    type Student struct {
    	Name string `json:"name"` //这里首字母大写可以让外部包可以访问
    	Sid  int    `json:"sid"`
    }
    
    func index(w http.ResponseWriter, r *http.Request) {
    	stu1 := Student{"小红", 1}
    	s, _ := json.Marshal(stu1)
    	w.Header().Set("Context-Type", "application/json")
    	w.Write(s)
    }
    
    func main() {
    	//通过http创建一个server
    	server := http.Server{Addr: "127.0.0.1:8080"}
    	http.HandleFunc("/", index)
    	if err := server.ListenAndServe(); err != nil {
    		fmt.Println("error")
    	}
    }
    

    这里我们实现了返回一个学生的json信息。使用json格式化,以及定义请求头。

    四、渲染html文档

    虽然说大部分是前后端分离的,但是也有的人家是直接给你返回页面的,给你html你可以直接通过浏览器展示出来的

    这种的的渲染的好处是,快,不需要前端再一次请求数据然后在渲染。

    package main
    
    import (
    	"fmt"
    	"html/template"
    	"net/http"
    )
    
    func index(w http.ResponseWriter, r *http.Request) {
    	//新建一个模板
    	t := template.New("index.html")
    	t.ParseFiles("./index.html") //这个你要解析的文件是哪个,如果index.html有使用别的页面,那都有加进来解析
    	// t.ParseFiles("./footer.html") //这个你要解析的文件是哪个,如果index.html有使用别的页面,那都有加进来解析
    	t.Execute(w, nil)
    }
    
    func main() {
    	//通过http创建一个server
    	server := http.Server{Addr: "127.0.0.1:8080"}
    	http.HandleFunc("/", index)
    	if err := server.ListenAndServe(); err != nil {
    		fmt.Println("error")
    	}
    }
    

    五、返回静态资源

    比如我在index.html中写上,我想访问logo这张图片。

     其实我们看到/resource 对应的是在文件目录是/public/resource 。这里我们需要使用goweb 做一个映射关系。

    package main
    
    import (
    	"fmt"
    	"html/template"
    	"net/http"
    )
    
    func index(w http.ResponseWriter, r *http.Request) {
    	//新建一个模板
    	t := template.New("index.html")
    	t.ParseFiles("./index.html") //这个你要解析的文件是哪个,如果index.html有使用别的页面,那都有加进来解析
    	// t.ParseFiles("./footer.html") //这个你要解析的文件是哪个,如果index.html有使用别的页面,那都有加进来解析
    	t.Execute(w, nil)
    }
    
    func main() {
    	//通过http创建一个server
    	server := http.Server{Addr: "127.0.0.1:8080"}
    	http.HandleFunc("/", index)
    	//访问resource前缀的,走http的文件服务,对应的resource映射到public/resource
    	http.Handle("/resource/", http.StripPrefix("/resource/", http.FileServer(http.Dir("public/resource"))))
    	if err := server.ListenAndServe(); err != nil {
    		fmt.Println("error")
    	}
    }
    

    六、如何定义一个模板方法

     七、toml如何配置,是个什么玩意

    这个知乎发链接用的是这个toml是github是这个github.com/pelletier/go-toml  

    https://zhuanlan.zhihu.com/p/341674420

    package main
    
    import (
    	"fmt"
    
    	"github.com/pelletier/go-toml"
    )
    
    type Viewer struct {
    	Title       string
    	Description string
    	Logo        string
    	Navigation  []string
    	Bilibili    string
    	Avatar      string
    	UserName    string
    	UserDesc    string
    }
    
    var doc = []byte(`
    [viewer]
        Title = "码神之路Go语言博客"
        Description = "码神之路Go语言博客"
        Logo = "/resource/images/logo.png"
        Navigation = ["首页","/", "GO语言","/golang", "归档","/pigeonhole", "关于","/about"]
        Bilibili = "https://space.bilibili.com/473844125"
        Zhihu = "https://www.zhihu.com/people/ma-shen-zhi-lu"
        Avatar = "https://gimg2.baidu.com/image_search
        UserName = "码神之路"
        UserDesc = "长得非常帅的程序员"`)
    
    type Config struct {
    	Viewer Viewer
    }
    
    func main() {
    	v := Config{}
    	// config, _ := toml.LoadFile("config/config.toml")
    	// fmt.Println(config.Get("viewer.Zhihu"))
    	toml.Unmarshal(doc, &v)
    	fmt.Println(v.Viewer.Avatar)
    
    }
    

      

  • 相关阅读:
    Volar vue终极开发神器!
    Object.assign基础与实际应用场景
    如何将Promise.then中的值直接return出来
    zap linux环境下的使用
    量化
    博客园中实现代码高亮
    react环境搭建
    博客园中实现代码高亮
    Python之标准库【shutil】
    Python之标准库【shutil】
  • 原文地址:https://www.cnblogs.com/hero799/p/16088091.html
Copyright © 2020-2023  润新知