Below you will find pages that utilize the taxonomy term “Struct”
December 24, 2020
重新认识Golang中的空结构体
"\u003col\u003e\n\u003cli\u003e认识空结构体\u003c/li\u003e\n\u003cli\u003e低层实现原理\u003c/li\u003e\n\u003cli\u003e空结构体之内存对齐\u003c/li\u003e\n\u003cli\u003e应用场景\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e在golang中,如果我们想实现一个set集合的话,一般会使用map来实现,其中将set的值作为map的键,对于map的值一般使用一个空结构体来实现,当然对map值也可以使用一个bool类型或者数字类型等,只要符合一个键值对应关系即可。但我们一般推荐使用struct{}来实现,为什么呢?\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epackage main\n\nimport \u0026#34;fmt\u0026#34;\n\nfunc main() {\n\tm := make(map[int]struct{})\n\tm[1] = struct{}{}\n\tm[2] = struct{}{}\n\n\tif _, ok := m[1]; ok {\n\t\tfmt.Println(\u0026#34;exists\u0026#34;)\n\t}\n\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e上面这段代码是一个很简单的使用map实现的set功能,这里是采用空结构体struct{}来实现。\u003c/p\u003e\n\u003cp\u003e在分析为什么使用struct{}以前,我看先认识一个struct。\u003c/p\u003e\n\u003ch2 id=\"认识空结构体-struct\"\u003e认识空结构体 struct\u003c/h2\u003e\n\u003cp\u003e我们先看一个这段代码\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epackage main\n\nimport ( …\u003c/code\u003e\u003c/pre\u003e"
August 12, 2013
golang中结构体的初始化方法的不同用法(new方法)
"\u003cp\u003e自定义一个结构体\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003etype Rect struct {\n x, y float64\n width, height float64\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e初始化方法:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003erect1 := new(Rect)\nrect2 := \u0026amp;Rect{}\nrect3 := \u0026amp;Rect{0, 0, 100, 200}\nrect4 := \u0026amp;Rect{width:100, height:200}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e注意这几个变量全部为指向Rect结构的指针(\u003cstrong\u003e指针变量\u003c/strong\u003e),因为使用了new()函数和\u0026amp;操作符。\u003c/p\u003e\n\u003cp\u003e而如果使用方法\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ea := Rect{}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e则表示这个是一个Rect{}\u003cstrong\u003e结构类型\u003c/strong\u003e.两者是不一样的.参考代码:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003efunc main() {\na := Rect{}\na.x = 15\n\nrect1 := \u0026amp;Rect{0, 0, 100, 200}\nrect1.x = 10\n\nfmt.Printf(\u0026#34;%v\\n%T\\n\u0026#34;, a, a)\nfmt.Printf(\u0026#34;%v\\n%T\\n\u0026#34;, rect1, rect1)\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e运行结果为:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e{15 0 0 0}\n main.Rect …\u003c/code\u003e\u003c/pre\u003e"