您的位置:首页 > 编程语言 > Go语言

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

2015-04-11 14:06 113 查看
对于MarkDown 编译器没有自动保存功能这件事情, 我表示严重的厌恶。 一个来小时的整理化为乌有,而且居然还不能导入到HTML编辑器, 真是无法忍受!

关键字

分类CGo
字符char
字符串string
浮点数double , floatfloat32 , float64 , complex64 , complex128
整数int long shortuint8 , uint16 , uint32 , uint64 , int8 , int16 , int32 , int64 , uint , int , uintptr , byte = uint8 , rune=unit32
boolboolean true , false
函数func
接口interface
void
Anyinterface{}
聚合enum , struct , unionstruct
符号限定符号signed , unsigned , auto , const , extern , register , static , volatileauto , const
流程控制break , case , do , for , goto , if , else , continue , default , return , switch , whilefor , if , else , goto , break , switch , case , default , fallthrough , range , select , range
数据结构map
其他sizeof , typedefiota , var , type , defer , go chan , package , import

操作符

功能CGo
取反
~
^
选择
? :
取指针内容
->
写入读出
<- ->
初始化并赋值
:=
其余的运算符基本相同

变量

XCGo
声明/定义TYPE NAME
int i
(var) NAME TYPE
var i int
字符(串)
char , char []
byte byte[], string
整形位宽依赖于特定的平台和编译器可以指定宽度, 也可以依赖平台编译器
有效范围栈上开辟的变量在作用域内有效, 堆上开辟的变量手动释放之前有效最后一个引用离开作用域之前都有效
作用域控制static 限制于本文件有效 , extern 寻找其他文件的全局变量大写开头可以导出, 小写仅限本包使用

指针

假设
a
是一个指向某结构体的指针,这个结构体中有个成员叫
b


CGo
a->b
a.b
取指针
&
运算符 和解指针
*
运算符是一样的.

在指针比较中, Go 中的 nil 等效C语言的 NULL .

函数

返回值

CGo
只能有一个可以有多个
比如:

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


闭包

CGo
C 语言的函数和变量是两个不同的概念, 变量仅可以通过函数指针的形式来标识一个函数.

Go 语言的函数也是一种变量 .

尝试下一下代码:

package main
import "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

XCGo
if“if ( condition) XXX else XXX“`“`if condition {XXX} else {XXX}
switch只能选择可以转化为整形的 , case中没有break自动继续可以任意类型, 不会自动继续, 除非使用failthrough
select是个函数关键字, 选择chan
forfor ( ; ; ) XXXfor ; ; {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
的成员变量和方法

并发

XC/C++Go
实现依赖系统接口的线程go 关键字, goroutine协程
依赖系统提供或者库或者自己实现sync包
通讯共享内存/消息消息
chan
机制

项目管理

XC/C++Go
编译器自行挑选自带
工程管理自行挑选自带
测试机制自行挑选自带
统一编码格式依赖程序员自觉工具统一整理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: