Golang与各语言横向比较

1. 指针 Golang VS C++

golang的指针可以说是安全版、简化版的C++指针,虽然是指针你也不会去关心其内存的释放问题,有两种方法返回一个指针。

1、make只能用来分配及初始化类型为slice,map,chan的数据;new可以分配任意类型的数据

2、new分配返回的是指针,即类型*T;make返回引用,即T;

其用法更像是定义了一个引用。

 

Struct的This指针与This对象

golang是不支持This关键字的,但可以通过如下定义实现类似this的功能。但主要以下两种不同的情况。

type NokiaPhone struct {
	a int
}

func (nokiaPhone * NokiaPhone) call() {
	nokiaPhone.a = 100
	fmt.Println("I am Nokia, I can call you!")
}

func (nokiaPhone  NokiaPhone) call() {
	nokiaPhone.a = 100
	fmt.Println("I am Nokia, I can call you!")
}

  	var test NokiaPhone

	test.call()
	fmt.Println(test.a)

线程:

Golang的goruntime是一种并发机制,并发包含并行。它是一种线程(C++/C#)与协程(Unity C#)合体。

https://blog.csdn.net/m0_37579159/article/details/79345831

以下文章定义了,线程间的通信机制,包括:Mutex、Channel

https://www.cnblogs.com/chenny7/p/4498322.html

PS:runtime包中有几个处理goroutine的函数,

函数

说明

Goexit

退出当前执行的goroutine,但是defer函数还会继续调用

Gosched

让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行

NumCPU

返回 CPU 核数量

NumGoroutine

返回正在执行和排队的任务总数

GOMAXPROCS

用来设置可以并行计算的CPU核数的最大值,并返回之前的值

以上几个方法还是挺有意思的。

 

golang断言

断言类型的语法:x.(T),这里x表示一个接口的类型,T表示一个类型(也可为接口类型)。

https://www.cnblogs.com/susufufu/archive/2017/08/13/7353290.html

可以使用两个变量进行接收

	bstr := []byte("大家好")

	var testin  interface{}

	testin = bstr

	if f, ok := testin.([]byte); ok{
		fmt.Println(f)
	}

	fmt.Println(testin.([]byte))

注意一点,断言也可以使用一个变量接收,如果转换失败,会抛出Panic异常。

 

 

interface{}

可以做为基础对象类型,它类似C#的System.Object、Java的Object、OC的NSObject。注意与变体类型var 的区别。

后者定义之后就不会进行修改类型了,前者可以在之后赋值。

 

Java

TS

JavaScript

OC

Swift

C#

golang

变体类型

Object

Var

var

id

var

var

var

基础对象

Object

Object

Object

NSObject

Any AnyObject

System.Object

interface{}

Null

Null

Null

Nil

nil

Null

nil

引用

TBD

TBD

1

*

结构体定义

1

  

1

1

1

1

关于基础对象类型,GO、Java 、C#是所有类型都是其派生,包括Int等基本的类型,OC支持C的基本数据类型,比如int,float 等, 其不是从NSObject继承的,当然这里GO使用派生这个词不太准确,因为它不是直接面向对象的语言。

关于变体,Go的var其实只是一个变量定义格式,而不是变体类型。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值