Golang 匿名结构体及测试代码编写技巧
转自: https://www.jianshu.com/p/901820e17ffb
结构体基础
结构体 (struct) 将多个不同类型的字段集中组成一种复合类型,按声明时的字段顺序初始化。
type user struct {
  name string
  age byte
}
user := user {"Tom", 2}
定义匿名结构体时没有 type 关键字,与其他定义类型的变量一样,如果在函数外部需在结构体变量前加上 var 关键字,在函数内部可省略 var 关键字。
// 在函数外部定义匿名结构体并赋值给 config
var config struct {
  APIKey string
  OAuthConfig oauth.Config
}
// 定义并初始化并赋值给 data
data := struct {
  Title string
  Users []*User
}{
  title,
  users
}
匿名结构体在四种常见情景下的用法。
组织全局变量
属于同一类的全局变量可通过匿名结构体组织在一起。
var config struct {
    APIKey      string
    OAuthConfig oauth.Config
}
config.APIKey = "BADC0C0A"
数据模版
可在后端把数据组织成前端需要的格式传给渲染模版
package main
import (
    "html/template"
    "net/http"
    "strings"
)
type Paste struct {
    Expiration string
    Content    []byte
    UUID       string
}
func pasteHandler(w http.ResponseWriter, r *http.Request) {
    paste_id := strings.TrimPrefix(r.URL.Path, "/paste")
    paste := &Paste{UUID: paste_id}
    keep_alive := false
    burn_after_reading := false
    data := struct {
        Paste *Paste
        KeepAlive bool
        BurnAfterReading bool
    } {
        paste,
        keep_alive,
        burn_after_reading,
    }
    t, _ := template.ParseFiles("templates/paste.html")
    t.Execute(w, data)
}
匿名函授定义并初始化之后赋值给 data 变量,除了把 Paste 结构体对象的值传给前端之外,还额外添加了必要的字段。
写过前后端的同学应该知道,前端有时需要后端返回一个标志变量作为判断条件是否显示某一块内容。
Expiration: {{ .Paste.Expiration }}
UUID: {{ .Paste.UUID}}
{{ if .BurnAfterReading }}
BurnAfterReading: True
{{ else }}
BurnAfterReading: False
{{ end }}
测试案例数据
在写测试代码时,经常用到匿名结构体生成用例的输入输出,为了覆盖各个测试维度,通常结合切片使用,构成了测试样例尽可能地覆盖所有可能发生情况。
var indexRuneTests = []struct {
    s    string
    rune rune
    out  int
}{
    {"a A x", 'A', 2},
    {"some_text=some_value", '=', 9},
    {"☺a", 'a', 3},
    {"a☻☺b", '☺', 4},
}
嵌入式锁 (Embedded lock)
var hits struct {
    sync.Mutex
    n int
}
hits.Lock()
hits.n++
hits.Unlock()
												
											Golang 匿名结构体及测试代码编写技巧的更多相关文章
- golang匿名结构体
		
go语言定义结构体类型时可以仅指定字段类型而不指定字段名字.这种字段叫做匿名字段(anonymous field). Go语言有一个特性允许只声明一个成员对应的数据类型而不指名成员的名字:这类成员就 ...
 - Golang结构体struct的使用(结构体嵌套, 匿名结构体等)
		
转自: https://studygolang.com/articles/11313 golang中是没有class的,但是有一个结构体struct,有点类似,他没有像java,c++中继承的概念,但 ...
 - golang 使用匿名结构体的问题
		
golang允许使用匿名结构体,形如 type Test struct { param1 struct { param2 string } } 一般在使用的时候可以直接这样初始化 a := Test{ ...
 - Golang 入门 : 结构体(struct)
		
Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...
 - Go语言使用匿名结构体解析JSON数据
		
手机拥有屏幕.电池.指纹识别等信息,将这些信息填充为 JSON 格式的数据.如果需要选择性地分离 JSON 中的数据则较为麻烦.Go 语言中的匿名结构体可以方便地完成这个操作. 首先给出完整的代码,然 ...
 - c语言结构体5之匿名结构体
		
注意: 1匿名结构体不会出现重合 重命名的情况 2有名结构体 名称不能相同 也就是不能重名 //匿名结构体不会出现重名的情况 struct //无名结构体 { ]; ]; int num; };//不 ...
 - 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
		
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
 - [go]匿名结构体
		
匿名结构体声明 使用匿名结构体 声明并初始化
 - 14条最佳JS代码编写技巧
		
http://gaohaixian.blog.163.com/blog/static/123260105201142645458315/写任何编程代码,不同的开发者都会有不同的见解.但参考一下总是好的 ...
 
随机推荐
- locate/find
			
locate 从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用updatedb更新库. 类似于数据库的索引建立,在首次简历索引的时候,很耗费资源,在建立完成后,查询 ...
 - Educational Codeforces Round 13    D. Iterated Linear Function     逆元+公式+费马小定理
			
D. Iterated Linear Function time limit per test 1 second memory limit per test 256 megabytes input s ...
 - Java学习笔记(持续更新ing)
			
1.在读入字符串时: str = sc.nextLine(); //读入一行 str = sc.next(); ...
 - codeforces997C
			
Sky Full of Stars CodeForces - 997C On one of the planets of Solar system, in Atmosphere University, ...
 - ios端浏览器拍照上传到服务器,图片被旋转90度 php 解决方案
			
1.可以通过前端进行解决,本案例通过后端解决的 判断请求的浏览器的ua,如果是ios浏览器则进行90度旋转 重点来了: 必须确保检测的图片是ios设备上传的完整图片,不要在前端压缩过的,因为压缩后的图 ...
 - javascript中的Date数据类型
			
javascript中,Date代表日期对象,其常见的用法如下: 一.Date的构造函数 有四种形式的Date构造函数,详见下面代码的注释: //1.构造函数没有参数,则返回当前日期的Date对象 v ...
 - 5.rabbitmq--通配符模式Topics
			
rabbitmq--通配符模式Topics topic模式也称为主题模式,其实他相对于routing模式最大的好处就是他多了一种匹配模式的路由,怎么理解匹配呢,其实就相当于我们之前正则的.*这种,不过 ...
 - Final——PowerShell Empire
			
一.介绍 Empire是一款针对Windows平台的.使用PowerShell脚本作为攻击载荷的渗透攻击框架工具,具有从stager生成.提权到渗透维持的一系列功能.Empire实现了无需powers ...
 - Nginx-HTTP之listen指令解析
			
1. ngx_http_core_listen static char * ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void ...
 - JS初探
			
如何实现点击后,有下拉菜单的效果呢? 写一个JS效果的步骤: 一.先实现布局 二.实现原理 三.了解JS语法 1.JS获取效果元素 2.知道是什么事件(鼠标事件.键盘事件.表单事件.系统事件.自定义事 ...