Go语言与主流语言的基础语法差异

ch1

go run hello_world.go

应用程序入口

  1. 必须是main包: package main (可以不是main的目录)

  2. 必须是main方法: func main()

  3. 文件名不一定是main.go

退出返回值

  1. GO中main函数不支持任何返回值

  2. 通过os.Exit来返回状态

获取命令行参数

  1. main函数不支持传入参数

  2. 程序中直接通过os.Args获取命令行参数

ch2

编写测试程序

  1. 源码文件以_test结尾: xxx_test.go

  2. 测试方法名以Test开头: func TestXXX(t *testing.T){}

变量赋值

  1. 赋值可以自动类型判断

  2. 一个赋值语句可以对多个变量同时赋值

常量定义

const (
//iota是一个预先声明的标识符,
//表示当前const规范的序号(通常用括号括起来)。
// 常量声明。它是0。
// 未类型化的int。
Monday = iota + 1
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)

const (
// 位运算
// 第1位,比特位为1,代表Open
Open = 1 << iota // 0001
// 第2位,比特位为1,代表Close
Close // 0010
// 第3位,比特位为1,代表Pending 
Pending // 0100
)

const (
// 位常量的定义方式

// 连续位的常量,用不同的二进制位来表示
Readable = 1 << iota
Writable
Executable
)

ch3

类型转换

  1. Go 语言不允许隐式类型转换

  2. 别名和原有类型也不能进行隐式类型转换

(主流语言潜在规则:小类型可以往大类型转换)

func TestImplicit(t *testing.T) {
var a int = 1
var b int64
//  invalid operation: b == a (mismatched types int64 and int)
b = int64(a)
var c MyInt
c = MyInt(b)
t.Log(a, b, c)
}

指针类型

  1. 不支持指针运算

  2. string是值类型,其默认的初始化值为空字符串,而不是nil

func TestPoint(t *testing.T) {
a := 1
aPtr := &a
//invalid operation: aPtr + 1 (mismatched types *int and int)
//aPtr = aPtr + 1
t.Log(a, aPtr) //  1 0xc00000a338
t.Logf("%T %T", a, aPtr)
}

func TestString(t *testing.T) {
var s string
t.Log("*" + s + "*") // **
t.Log(len(s)) // 0
}

ch4

算数运算符

  1. Go语言没有前置的++,–

用==比较数组

  1. 相同维数且包含相同个数元素的数组才可以比较
  2. 每个元素都相同才相等

位运算符

与其他主要编程语言的差异 对于左右操作数

只要右边操作数的位上的为1,无论左边操作数的位上是0还是1,结果都是0 把左边的对应二进制位清零

只要右边操作数的位上的为0,则左边对应二进制位原来是什么结果就是什么

 &^ 按位置零
 1 &^ 0 -- 1
 1 &^ 1 -- 0
 0 &^ 1 -- 0
 0 &^ 0 -- 0

ch5

循环

Go仅支持循环关键字for

if 条件

支持变量赋值

  if var declaration; condition(
// code to be executed if condition is ture
)

func TestIfMultiSec(t *testing.T) {
if v, err := someFun(); err == nil {
t.Log(v)
} else {
t.Log("error", err)
}
}

switch 条件

case条件不限制常量或整数

case条件可以多个表达式

每个case有默认break

switch {
case 0 <= Num && Num <=3
fmt.PrintF("0~3")
case 4 <= Num && Num <=6
fmt.PrintF("4~6")
default:
fmt.PrintF("other")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值