Golang语言 与 C 语言 的比较学习

对于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

a.b
  • 取指针& 运算符 和解指针 * 运算符是一样的.
  • 在指针比较中, Go 中的 nil 等效C语言的 NULL .

函数

返回值

C

Go

只能有一个

可以有多个

比如:

func exchange( a  int , b int ) ( int , int ){    return b , a
}

闭包

C

Go

C 语言的函数和变量是两个不同的概念, 变量仅可以通过函数指针的形式来标识一个函数. Go 语言的函数也是一种变量 . 尝试下一下代码:

package mainimport "fmt"func GetFunc( ) func(int) int {
    i := 0 //   这个变量被绑定到下面的返回函数    return increment_i ( j int ) int {
        i += j;        return i
    } 
}func main() {
    func_i1 := GetFunc()
    func_i2 := GetFunc()    // 上面两次调用GetFunc, 获得两个increment_i 函数, 各自绑定自己的 i 变量    for i :=0 ; i < 10; i++ {
        fmt.Println("Func1 print : ", func_i1(i))
        fmt.Println("Func2 print : ", func_i2(i+1))
    }
}

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 IOOTestvar test OOTest 
i_test = &test
  • Combination 没啥子好说的
  • Inherit ( by anonymous combination )
type OOTest1 struct{    OOTest    b int
}

这样 OOTest1 就拥有了 OOTest 的成员变量和方法

并发


X

C/C++

Go

实现

依赖系统接口的线程

go 关键字, goroutine协程

依赖系统提供或者库或者自己实现

sync包

通讯

共享内存/消息

消息 chan机制

项目管理


X

C/C++

Go

编译器

自行挑选

自带

工程管理

自行挑选

自带

测试机制

自行挑选

自带

统一编码格式

依赖程序员自觉

工具统一整理

原文地址

http://studygolang.com/wr?u=http%3a%2f%2fblog.csdn.net%2fcchd0001%2farticle%2fdetails%2f44982127

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-06-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

代码优化那些事

/**************************************************************************/

7030
来自专栏章鱼的慢慢技术路

字符串练习——输入关键字找歌曲

17550
来自专栏python3

python3--面向对象--综合练习

3  解释生成器(generator)与函数的不同,并实现且使用简单generator

16320
来自专栏chenssy

推荐四十多条纯干货 Java 代码优化建议

代码优化最重要的作用应该是避免未知的错误,因此在写代码的时候,从源头开始注意各种细节,权衡并使用最优的选择,将会很大程度上避免出现未知的错误,从长远看也极大的降...

12980
来自专栏编程一生

PHP开发人员对JAVA的WEB开发入门(初版-基础知识)

13340
来自专栏NetCore

设计异常解决方案的几点注意事项

“要……”描述的是总要遵循的规范(但特殊情况下,可能需要违反)。 “考虑……”描述的是一般情况下应该遵循的规范,但如果完全理解规范背后的道理,并有很好的理由不遵...

20190
来自专栏SpringBoot

提升Java性能

代码 优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面...

19530
来自专栏WebDeveloper

Go语言入门

Go语言相对比较简单,与C语言有点像,所以在有C基础的情况下,再学习下Go的特性,基本就懂得怎么写了,学起来不会像Scala那么痛苦,太多的特性及语法糖。Go奉...

17520
来自专栏纯洁的微笑

正则表达式和 CPU 100%有什么故事?

18320
来自专栏angularejs学习篇

angularjs学习第九天笔记(指令作用域【隔离作用域】研究)

9420

扫码关注云+社区

领取腾讯云代金券