一文读懂Go匿名结构体使用场景
前言
匿名行为在go语言里非常常见,比如:
-
匿名函数:也就是我们熟知的闭包(Closure)
-
结构体里的匿名字段(Anonymous Fields)
-
匿名结构体(Anonymous Structs)
匿名行为的设计带来了一些理解上的困难,但是熟悉了匿名设计的使用后,你会发现匿名设计在某些特定场景可以帮助大家写出更简洁、更优雅、更高效和更安全的代码。
什么是匿名结构体
匿名结构体:顾名思义,就是结构体没有命名。比如下面的代码示例:
// example1.go package main import ( "fmt" ) func main() { a := struct{name string; age int}{"bob", 10} b := struct{ school string city string }{"THU", "Beijing"} fmt.Println(a, b) }
在这个例子里,我们定义了2个变量a和b,它们都是匿名结构体变量。
常见的使用场景
全局变量组合
有时候我们会在程序里定义若干全局变量,有些全局变量的含义是互相关联的,这个时候我们可以使用匿名结构体把这些关联的全局变量组合在一起。
// example2.go package main import "fmt" // DBConfig 声明全局匿名结构体变量 var DBConfig struct { user string pwd string host string port int db string } // SysConfig 全局匿名结构体变量也可以在声明的时候直接初始化赋值 var SysConfig = struct{ sysName string mode string }{"tutorial", "debug"} func main() { // 给匿名结构体变量DBConfig赋值 DBConfig.user = "root" DBConfig.pwd = "root" DBConfig.host = "127.0.0.1" DB