转自: https://www.jianshu.com/p/901820e17ffb

结构体基础

结构体 (struct) 将多个不同类型的字段集中组成一种复合类型,按声明时的字段顺序初始化。
type user struct {name stringage byte
}user := user {"Tom", 2}定义匿名结构体时没有 type 关键字,与其他定义类型的变量一样,如果在函数外部需在结构体变量前加上 var 关键字,在函数内部可省略 var 关键字。
// 在函数外部定义匿名结构体并赋值给 config
var config struct {APIKey stringOAuthConfig oauth.Config
}// 定义并初始化并赋值给 data
data := struct {Title stringUsers []*User
}{title,users
}

匿名结构体在四种常见情景下的用法。

组织全局变量

属于同一类的全局变量可通过匿名结构体组织在一起。var config struct {APIKey      stringOAuthConfig oauth.Config
}config.APIKey = "BADC0C0A"

数据模版

可在后端把数据组织成前端需要的格式传给渲染模版
package mainimport ("html/template""net/http""strings"
)type Paste struct {Expiration stringContent    []byteUUID       string
}func pasteHandler(w http.ResponseWriter, r *http.Request) {paste_id := strings.TrimPrefix(r.URL.Path, "/paste")paste := &Paste{UUID: paste_id}keep_alive := falseburn_after_reading := falsedata := struct {Paste *PasteKeepAlive boolBurnAfterReading 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    stringrune runeout  int
}{{"a A x", 'A', 2},{"some_text=some_value", '=', 9},{"☺a", 'a', 3},{"a☻☺b", '☺', 4},
}

嵌入式锁 (Embedded lock)

var hits struct {sync.Mutexn int
}hits.Lock()
hits.n++
hits.Unlock()

转载于:https://www.cnblogs.com/nyist-xsk/p/11226725.html

Golang 匿名结构体及测试代码编写技巧相关推荐

  1. Golang匿名结构体结构体嵌套(实战使用)

    背景 最近研究钉钉机器人的时候,总是会向钉钉官方接口发送很多请求,发送请求的时候,需要封装body结构体传递参数,还要封装response结构体用来接收返回值,有时候,response结构体中还要嵌套 ...

  2. go结构体初始化_go嵌套匿名结构体的初始化详解

    go匿名结构体 嵌套匿名结构体的 示例代码片. type debugConfig struct { MaxQueueDepth int `json:"maxQueueDepth"` ...

  3. Golang结构体struct的使用(结构体嵌套, 匿名结构体等)

    转自: https://studygolang.com/articles/11313 golang中是没有class的,但是有一个结构体struct,有点类似,他没有像java,c++中继承的概念,但 ...

  4. GoLang之结构体匿名字段

    文章目录 1.结构体内嵌套匿名结构体(访问相同字段) 2.结构体内嵌套匿名结构体(访问相同方法) 3.结构体嵌套匿名自定义类型 4.结构体嵌套匿名内置类型 5.结构体嵌套任意类型匿名指针 6.匿名结构 ...

  5. Golang 入门 : 结构体(struct)

    Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...

  6. Go 学习笔记(14)— 结构体定义、实例化、初始化、匿名结构体、结构体访问、结构体作为形参、结构体指针

    Go 语言中没有 "类" 的概念,也不支持 "类" 的继承等面向对象的概念.Go 语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法. 1. 结 ...

  7. C语言 匿名联合体和匿名结构体

    C语言 匿名联合体和匿名结构体 匿名联合体和匿名结构体顾名思义,就是没有名字的联合体和结构体,没有名字哪怎么用?拿来用? 在嵌入式数据通信里面,大部分都是使用联合体,将有实际意义的结构体和字节数组互相 ...

  8. 【Linux 内核】进程管理 task_struct 结构体 ① ( task_struct 结构体引入 | task_struct 代码示例 )

    文章目录 一.task_struct 结构体 二.task_struct 结构体代码示例 一.task_struct 结构体 在 Linux 操作系统 中 , 进程 作为 调度的实体 , 需要将其抽象 ...

  9. golang修改结构体中的切片值

    golang修改结构体中的切片值,直接传结构体地址就可以 package mainimport "fmt"type rspInfo struct {KeyWords string ...

最新文章

  1. 【 Thread】创建线程的2种方法
  2. python自动排版 html_Python 实现自动完成A4标签排版打印功能
  3. java获取tomcat目录结构_tomcat目录结构简介_动力节点Java学院整理
  4. python线性回归实例_python线性回归示例
  5. java插入数据库字符串拼接_java连接mysql数据库实现单条插入和批量插入
  6. ArcGIS Runtime SDK for Android开发之调用GP服务(异步调用)
  7. 程序员面试金典——9.4集合的子集
  8. 《机器人爱好者(第3辑)》——D机器人引领自动驾驶汽车之路
  9. [教程]VC++6.0的简单使用
  10. 浅谈外网通过反向代理访问内网资源时的权限保护
  11. IPv6: link local 地址fe80
  12. python 以图搜图百度_基于opencv的图片检索(模仿百度的以图搜图功能)
  13. v3S移植mplayer播放器
  14. 分享AI前端硬件识别4G摄像头模组方案
  15. 大三软件测试实习生面试经验-1
  16. 使用 UnrealPak.exe 创建 Pak文件方法
  17. 最老程序员创业开发实训10---Android---注册登录功能实现1
  18. 一文弄懂Python中的Lambda表达式
  19. P24 023递归:这帮小兔崽子
  20. 开通我的技术博客,和以前关于生活的博客,分开旅行

热门文章

  1. 从入门到高阶,读懂机器学习需要哪些数学知识
  2. 高等数学、线性代数、概率论数理统计书籍推荐
  3. CCTYPE函数系列
  4. 蒙特卡罗(Monte Carlo)方法
  5. oledb32.dll的作用
  6. 011_JavaScript数据类型
  7. java 泛型 get()_Java泛型,get类的泛型参数
  8. 怎么让html 整体加大,让一个Html元素撑满整个屏幕可以这样玩
  9. dalsa线扫相机调试文档_线阵相机调试文档
  10. vs2017运行显示系统找不到指定的文件_windows 平台使用 VS2017 编译 libevent 源码