概述:

go语言与其他语言相比,go语言的关键字非常少,只有25个,c语言有37个,c++有84个,python有33个,java有53个。

差异1:go语言不允许隐式转换,别名和原有类型也不能进行隐式类型转换

测试代码1.1:
package const_learn

import "testing"

func TestType(t *testing.T) {
var a int = 1
var b int64
b = a
t.Log(a, b)
}
  显示结果:

我们可以发现变量类型报错,使用int32的a也是同样报错

测试代码1.2:
package const_learn

import "testing"

type MyInt int64

func TestType(t *testing.T) {
var a int = 1
var b int64
b = int64(a) //显示类型转换
t.Log(a, b)
var c MyInt
c = b
t.Log(a, b, c)
}
  显示结果:

可以发现别名做隐式类型转换也是会报错的,只能进行显示转换

差异2:不支持指针运算

测试代码:
func TestPoint(t *testing.T) {
a := 1
aPtr := &a
aPtr = aPtr + 1
t.Log(a, aPtr)
t.Log("%T, %T", a, aPtr)
}
  测试结果:

发现编译错误

差异3:string是值类型,其默认的初始化值为空字符串,而不是nil

测试代码:
func TestString(t *testing.T) {
var s string
t.Log("*" + s + "*")
t.Log(len(s))
if s == "" {
t.Log("string是值类型")
}
}
测试结果:

可以看到变量 s 为空字符串,而不是“空”

差异4:go语言没有前置的 ++ 和 --

差异5:go语言在数组维数和元素个数相同时可以进行比较,比较时,数组中每个元素都相同且顺序相同返回true,反之false

测试代码1.1:
func TestOperator(t *testing.T) {
a := [...]int{1, 2, 3, 4}
b := [...]int{1, 3, 4, 5}
c := [...]int{1, 2, 3, 4, 5}
d := [...]int{1, 2, 3, 4}
t.Log(a == c) }
  测试结果:

数组元素个数不相同,编译错误

测试代码1.2:
func TestOperator(t *testing.T) {
a := [...]int{1, 2, 3, 4}
b := [...]int{1, 3, 4, 5}
d := [...]int{1, 2, 3, 4}
t.Log(a == b)
t.Log(a == d) }
  测试结果:

可以发现只有数组中的每个元素都相等时,比较为true

测试代码1.3:
func TestOperator(t *testing.T) {
a := [...]int{1, 2, 3, 4}
b := [...]int{1, 3, 2, 4}
d := [...]int{1, 2, 3, 4}
t.Log(a == b)
t.Log(a == d) }
  测试结果:

可以发现两个数组中的元素都相同时,顺序不同,返回的结果依然是false

差异6:go语言提供按位清零运算符号  &^

测试代码:
// Readable 0001, Writable 0010, Executable 0100
func TestOperator2(t *testing.T) {
a := 7 //0111
a = a &^ Readable // 0111 &^ 0001 -> 0110
t.Log(a) //6
t.Log(a&Readable == Readable) // 0110 & 0001 -> 0000 != 0001
t.Log(a&writable == writable) // 0110 & 0010 -> 0010 = 0010
t.Log(a&Executable == Executable) // 0110 & 0100 -> 0100 = 0100
}
测试结果:

差异7:go语言没有while,可以使用 for 代替

测试代码:
func TestWhileLoop(t *testing.T) {
n := 0
for n < 5 {
t.Log(n)
n++
}
}
测试结果:

差异8:go语言switch....case语句中的case和 if 语句支持在后面写有多个项

测试代码:
func TestSwitch(t *testing.T) {
for i := 0; i < 5; i++ {
switch i {
case 0, 2:
t.Log("Even")
case 1, 3:
t.Log("Odd")
default:
t.Log("it is not 0-3")
}
}
}
测试结果:

差异9:go语言的map在访问key不存在时,仍会返回零值,使得无法区分当前的key是不存在,还是key的value为0

测试代码:
func TestAccessNotExistingKey(t *testing.T) {
m1 := map[int]int{}
t.Log(m1[1])
m1[2] = 0
t.Log(m1[2])
m1[3] = 0
if v, ok := m1[3]; ok {
t.Logf("key 3's value is %d", v)
t.Log(ok)
} else {
t.Log("key 3 is not existing.")
}
}
  测试结果:

使用m1[3]进行赋值时,会返回两个值,一个是value,一个是布尔值。当布尔值为true时,说明当前key的value是存在的,反之则不存在。

Go语言与其他高级语言的区别的更多相关文章

  1. C、C++、C#、Java、php、python语言的内在特性及区别

    C.C++.C#.Java.PHP.Python语言的内在特性及区别: C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作 ...

  2. js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么

    js课程 3-10  js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...

  3. C程序设计语言--指针和引用的区别

    在看了一篇文章以后,http://coolshell.cn/articles/7992.html,说的是C和C++之间的缺陷,当然这篇文章说的非常高深了.所以就找了一些资料,分析了这两者的区别 在&l ...

  4. Java 自增(++) 和 C语言中自增的区别

    在Java.c语言等高级语言中自增和自减的作用基本一致,都是变量自身加一或减一.下面我只对自增进行说明,自减是类似的. 自增运算符(++),有两种书写形式,一个是在变量前: ++ num; 另一种在变 ...

  5. C语言几个输入函数的区别(史上最详细)

    The difference of the string and the character(char): 字符串是一个带有""的字符序列如 "I fuck xuqian ...

  6. C语言realloc,malloc,calloc的区别【转载】

    转载自:http://www.cnblogs.com/BlueTzar/articles/1136549.html 三个函数的申明分别是: void* realloc(void* ptr, unsig ...

  7. 动态样式语言Sass&Less介绍与区别

    一. Sass/Scss&Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,语法跟css一样(但多了些功能),比css好写, ...

  8. C语言i++和++i的区别和指针*(a++)和*(++a)的区别

    i++ :先引用后增加++i :先增加后引用i++ :先在i所在的表达式中使用i的当前值,后让i加1 ++i :让i先加1,然后在i所在的表达式中使用i的新值 一.c语言中i++和++i的运行效果是不 ...

  9. c语言return与exit的区别

    2013-09-0918:54:33 exit函数在头文件stdlib.h中,函数原型: void exit(int status); exit(0) 正常运行程序并退出程序. exit(1) 非正常 ...

随机推荐

  1. H3C交换机配置DHCP服务器

    dhcp server ip-pool vlan4020 network 10.3.7.0 mask 255.255.255.0 gateway-list 10.3.7.254 dns-list 20 ...

  2. HDU2586 How far away ? (树链剖分求LCA)

    用树链剖分求LCA的模板: 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 const ...

  3. 洛谷P7167 [eJOI 2020 Day1] Fountain (单调栈+ST)

    开两个数组:to[i][j]表示从i这个位置向下的第2j个圆盘是哪个,f[i][j]表示流满从i这个位置向下的 2j 个圆盘需要多少体积的水. 详情见代码: 1 #include<bits/st ...

  4. DDD-领域驱动(二)-贫血模型与充血模型

    贫血模型 一般来说 贫血模型:**一个类中只有属性或者成员变量,没有方法 **!例如 DbFirst 从数据库同步实体过来, -- 对于一个系统刚开始的时候会觉得这时候是最舒服的,但是如果后期系统需要 ...

  5. Mapper 实体转换Entiy to Dto

    实际使用中发现很多问题 如果用EFcore 框架,这个表达式树生成一个新的实体导致EFcore 跟踪失败!/// <summary> /// 生成表达式目录树 泛型缓存 /// </ ...

  6. Educational Codeforces Round 137 (Rated for Div. 2) A-F

    比赛链接 A 题解 知识点:数学. \(4\) 位密码,由两个不同的数码组成,一共有 \(C_4^2\) 种方案.从 \(10-n\) 个数字选两个,有 \(C_{10-n}^2\) 种方案.结果为 ...

  7. letcode刷题记录-day01-两数之和

    题目:两数之和 描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  8. CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) A-D

    比赛链接 A 题解 知识点:贪心. 注意到 \(a[1] \neq 1\) , \(1\) 永远不可能换到前面:\(a[1] = 1\) 可以交换后面任意元素. 时间复杂度 \(O(n)\) 空间复杂 ...

  9. MPC:百万富翁问题

    学习文章:"一起学MPC:(一)百万富翁问题"和"[隐私计算笔谈]MPC系列专题(一):安全多方计算应用场景一览" 百万富翁问题 将问题具体化: Alice有\ ...

  10. onps栈使用说明(3)——tcp、udp通讯测试

    4. tcp客户端 在协议栈源码工程下,存在一个用vs2015建立的TcpServerForStackTesting工程.其运行在windows平台下,模拟实际应用场景下的tcp服务器.当tcp客户端 ...