Go基础2|青训营笔记

85 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔

Go数据类型

  • 指针类型
    指针的使用我感觉还是和C语言有点像 // 准备一个字符串类型
    var house = "Malibu Point 10880, 90265"
    // 对字符串取地址, ptr类型为*string
    ptr := &house
    // 打印ptr的类型
    fmt.Printf("ptr type: %T\n", ptr) // 打印ptr的指针地址
    fmt.Printf("address: %p\n", ptr)

  • Go数组
    var a [3]int
    q := [3]int{1, 2, 3}

    • 数组遍历
    for k, v := range q{
         fmt.Println(k, v)
    }
  • make() 函数构造切片
    如果需要动态地创建一个切片,可以使用 make() 内建函数,格式如下:
    make([]Type, size, cap )
    cap是 的内部存储空间已经分配了的数量,但实际使用的是size数量。

Go复合数据类型

Map

Go中的map是哈希表的引用,他的顺序是随机,如果你要顺序取出,就要自己用sort包就排序 Map可以写成map[K]V,map中的Key必须是一个同一个类型,value也是,key和value可以是不一样

  • map使用
ages := make(map[string]int) 
ages := map[string]int{
    "alice":   31,
    "charlie": 34,
}

删除

delete(ages, "alice") /

文本和HTML模板

当printf输出的格式相对复杂的时候,这些功能是由text/template和html/template等模板包提供的,它们提供了一个将变量值填充到一个文本或HTML格式的模板的机制。
目前我理解的是Go语言内置了 text/template 和 html/template两个模板库,专门用于处理网页html模板。html/template 是在 text/template 模板库的基础上增加了对html输出的安全处理,主要目的是为了防止被攻击。

  1. 设置一个模板文件.tpl 例如下面模版代码保存至views/demo.tpl
{{define "demo"}}  define "模板名" 用于定义子模板,后面渲染模板会用到这个名字。
昵称: {{.Name}}, //表示引用模板中的参数
//如果是string ,int ,float时可以直接{{.}}来使用
//Map中{{.里面的参数项}}
{{- if .IsWin}} 
恭喜,大吉大利,今晚吃鸡!
{{- else}} 遗憾,鸡被吃光了! 
{{- end}} 
{{- end}}

2.导入包

import "text/template"

.3.加载模版代码 加载模版代码,并且创建template对象t template.ParseGlob 函数加载views目录下的所有tpl为后缀的模版文件 template.Must函数主要用于检测加载的模版有没有错误,有错误输出panic错误,并且结束程序。

t := template.Must(template.ParseGlob("./views/*.tpl"))

4.根据模版参数渲染模版 定义模版参数:

//这里定义一个struct类型的模版参数,实际上模版可以是任意类型数据
type GameStatus struct {
    Name string
    IsWin bool
}

tpl模板文件只能传入一个模版参数,如果想传入多个模版参数,可以使用map或者struct类型。 初始化模板参数, 这里初始化一个参数数组,下面用于循环渲染模板。

var userStatus = []GameStatus{
    {"大春", true},
    {"NiuBee", false},
    {"球球", true},
}

下面是根据userStatus 数组循环渲染模板

for _, u := range userStatus {
    //根据参数u, 渲染命名为demo的模板,并且将渲染结果打印到标准输出
    err := t.ExecuteTemplate(os.Stdout, "demo", u)
    if err != nil {
        log.Println("executing template:", err)
    }
}

输出结果:

昵称: 大春,
恭喜,大吉大利,今晚吃鸡!
昵称: NiuBee,
遗憾,鸡被吃光了!
昵称: 球球,
恭喜,大吉大利,今晚吃鸡!