Go:struct

Go:struct

struct

面向对象 Class 类的底层实现从某些方面说就是结构体,对象的引用就是指针,只是语言把他们封装起来了而已。

Golang 的 Struct 结构体(源于 C 语言,但又有别于 C)的灵活性:
go 语言中并没有像 C++,Java 语言中这类的 Class,它只含有像 C 语言中的结构体,用结构体和指针等特性,完成一个类的作用,很巧妙的使用了指针和结构体,不仅是 go 的面向对象,包括 go 语言中的 map 等操作都是借助了结构体。其实,说白了,C++、Java 等面向对象的语言中,类的底层实现就是结构体,对象的引用就是指针,只是语言把他们封装起来了而已。很多人刚接触面向对象很不理解这些东西也应该缘于此。

或者说,面向对象的封装在某种意义上是以牺牲灵活特性的为代价的一种抽象简化。

所有高级语言(PHP、Java、Python、JavaScript 等等…)的数组 Array、字典 map、Slice 切片、Json 等结构类型往往只是叫法不一样,多少都源于 C 系或者受到 C 系的 Struct 结构体思想的影响,在某些特定领域内,做了一些针对性的解决方案。

PHP 就是 c 语言实现的一套高级“程序”语言,只不过是这套“程序化的语言”的规范和语法等机制可以用来快速做 web 领域的事情,通过解释器,转成底层语言完成代码的最终执行。

这也印证了很多答案往往追根溯源都在计算机数据结构基础里没有捷径可以走。

golang struct 注意事项:

对于 struct 类型来说,字段的先后顺序是非常关键的。如果两个 struct 类型包含了完全相同的字段,但是排列顺序不同或者进行了部分合并,那么这两个 struct 就是不同的类型!

如果 struct 字段是大写字母开头,那么该字段就是导出的(包外可见),这也符合 Go 语言的可见性规则。因此一个 struct 可以同时包含导出和未导出的变量。

Author

Jaco Liu

Posted on

2020-02-27

Updated on

2025-12-24

Licensed under