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)
}

浙公网安备 33010602011771号