分享
Go 语言 与 C 语言 的比较学习
cchd0001 · · 2987 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
对于MarkDown 编译器没有自动保存功能这件事情, 我表示严重的厌恶。 一个来小时的整理化为乌有,而且居然还不能导入到HTML编辑器, 真是无法忍受!
关键字
| 分类 | C | Go |
|---|---|---|
| 字符 | char | 无 |
| 字符串 | 无 | string |
| 浮点数 | double , float | float32 , float64 , complex64 , complex128 |
| 整数 | int long short | uint8 , uint16 , uint32 , uint64 , int8 , int16 , int32 , int64 , uint , int , uintptr , byte = uint8 , rune=unit32 |
| bool | 无 | boolean true , false |
| 函数 | 无 | func |
| 接口 | 无 | interface |
| 空 | void | 无 |
| Any | 无 | interface{} |
| 聚合 | enum , struct , union | struct |
| 符号限定符号 | signed , unsigned , auto , const , extern , register , static , volatile | auto , const |
| 流程控制 | break , case , do , for , goto , if , else , continue , default , return , switch , while | for , if , else , goto , break , switch , case , default , fallthrough , range , select , range |
| 数据结构 | 无 | map |
| 其他 | sizeof , typedef | iota , var , type , defer , go chan , package , import |
操作符
| 功能 | C | Go |
|---|---|---|
| 取反 | ~ |
^ |
| 选择 | ? : |
|
| 取指针内容 | -> |
|
| 写入读出 | <- -> |
|
| 初始化并赋值 | := |
其余的运算符基本相同
变量
| X | C | Go |
|---|---|---|
| 声明/定义 | TYPE NAME int i |
(var) NAME TYPE var i int |
| 字符(串) | char , char [] |
byte byte[], string |
| 整形位宽 | 依赖于特定的平台和编译器 | 可以指定宽度, 也可以依赖平台编译器 |
| 有效范围 | 栈上开辟的变量在作用域内有效, 堆上开辟的变量手动释放之前有效 | 最后一个引用离开作用域之前都有效 |
| 作用域控制 | static 限制于本文件有效 , extern 寻找其他文件的全局变量 | 大写开头可以导出, 小写仅限本包使用 |
指针
假设a 是一个指向某结构体的指针,这个结构体中有个成员叫b 。
| C | Go |
|---|---|
a->b |
a.b |
函数闭包
| C | Go |
|---|---|
| 无 | 有 |
PO
| X | C | Go |
|---|---|---|
| if | "if ( condition) XXX else XXX"` | "`if condition {XXX} else {XXX} |
| switch | 只能选择可以转化为整形的 , case中没有break自动继续 | 可以任意类型, 不会自动继续出发使用failthrough |
| select | 是个函数 | 关键字, 选择chan |
| for | for ( ; ; ) XXX | for ; ; {XXX} |
| while | 有 | 无 |
| do ... while | 有 | 无 |
编程规范
- 句末不需要分号
- if for 的代码段必须被大括号包围
- if 的 condition 不要括号
- for 的 指示部分不要括号
- 左花括号不能自成一行
OO
- Method
在关键字 func 和函数名字之间说明属于那个结构体。
type OOTest struct {
a int
}
func ( this * OOTest) GetAByPointer() int {
return this.a
}
func ( this OOTest) GetAByCopy() int {
return this.a
}
- Interface
定义接口,说明函数类型
type IOOTest interface {
GetAByPointer() int
}
使用的时候将实现了对应的接口的结构体对象指针赋值给接口对象
var i_test IOOTest
var test OOTest
i_test = &test
Combination
没啥子好说的Inherit ( by anonymous combination )
type OOTest1 struct{
OOTest
b int
}
这样 OOTest1 就拥有了 OOTest 的成员变量和方法
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2987 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
对于MarkDown 编译器没有自动保存功能这件事情, 我表示严重的厌恶。 一个来小时的整理化为乌有,而且居然还不能导入到HTML编辑器, 真是无法忍受!
关键字
| 分类 | C | Go |
|---|---|---|
| 字符 | char | 无 |
| 字符串 | 无 | string |
| 浮点数 | double , float | float32 , float64 , complex64 , complex128 |
| 整数 | int long short | uint8 , uint16 , uint32 , uint64 , int8 , int16 , int32 , int64 , uint , int , uintptr , byte = uint8 , rune=unit32 |
| bool | 无 | boolean true , false |
| 函数 | 无 | func |
| 接口 | 无 | interface |
| 空 | void | 无 |
| Any | 无 | interface{} |
| 聚合 | enum , struct , union | struct |
| 符号限定符号 | signed , unsigned , auto , const , extern , register , static , volatile | auto , const |
| 流程控制 | break , case , do , for , goto , if , else , continue , default , return , switch , while | for , if , else , goto , break , switch , case , default , fallthrough , range , select , range |
| 数据结构 | 无 | map |
| 其他 | sizeof , typedef | iota , var , type , defer , go chan , package , import |
操作符
| 功能 | C | Go |
|---|---|---|
| 取反 | ~ |
^ |
| 选择 | ? : |
|
| 取指针内容 | -> |
|
| 写入读出 | <- -> |
|
| 初始化并赋值 | := |
其余的运算符基本相同
变量
| X | C | Go |
|---|---|---|
| 声明/定义 | TYPE NAME int i |
(var) NAME TYPE var i int |
| 字符(串) | char , char [] |
byte byte[], string |
| 整形位宽 | 依赖于特定的平台和编译器 | 可以指定宽度, 也可以依赖平台编译器 |
| 有效范围 | 栈上开辟的变量在作用域内有效, 堆上开辟的变量手动释放之前有效 | 最后一个引用离开作用域之前都有效 |
| 作用域控制 | static 限制于本文件有效 , extern 寻找其他文件的全局变量 | 大写开头可以导出, 小写仅限本包使用 |
指针
假设a 是一个指向某结构体的指针,这个结构体中有个成员叫b 。
| C | Go |
|---|---|
a->b |
a.b |
函数闭包
| C | Go |
|---|---|
| 无 | 有 |
PO
| X | C | Go |
|---|---|---|
| if | "if ( condition) XXX else XXX"` | "`if condition {XXX} else {XXX} |
| switch | 只能选择可以转化为整形的 , case中没有break自动继续 | 可以任意类型, 不会自动继续出发使用failthrough |
| select | 是个函数 | 关键字, 选择chan |
| for | for ( ; ; ) XXX | for ; ; {XXX} |
| while | 有 | 无 |
| do ... while | 有 | 无 |
编程规范
- 句末不需要分号
- if for 的代码段必须被大括号包围
- if 的 condition 不要括号
- for 的 指示部分不要括号
- 左花括号不能自成一行
OO
- Method
在关键字 func 和函数名字之间说明属于那个结构体。
type OOTest struct {
a int
}
func ( this * OOTest) GetAByPointer() int {
return this.a
}
func ( this OOTest) GetAByCopy() int {
return this.a
}
- Interface
定义接口,说明函数类型
type IOOTest interface {
GetAByPointer() int
}
使用的时候将实现了对应的接口的结构体对象指针赋值给接口对象
var i_test IOOTest
var test OOTest
i_test = &test
Combination
没啥子好说的Inherit ( by anonymous combination )
type OOTest1 struct{
OOTest
b int
}
这样 OOTest1 就拥有了 OOTest 的成员变量和方法