Go语言程序设计(1)

概述

有一点是要说明的,Java无意间成了更好的C++(开发角度来说),Go的目标则是充当更好的C,虽然垠神喷了又喷go的这与那,但作为一门工程师气息很重的语言,社区也越发强大的语言,为了更好的工程实践,需要深刻学习,并尝试替换后端难以维护的C写的后端.
最后,选择一门语言不是选择一门语言本身,更多的是选择社区.称为开发人员的社会性?

第一章 举例

Go的HelloWorld.go

1
2
3
4
5
6
7
8
package main
import (
"fmt"
)
func main() {
who := "World!"
fmt.Println("Hello", who)
}

第二章 布尔与数值类型

2.1 基础

2.1.1 注释风格

  • 采用了C的方式,行注释为//,块注释为/**/
1
2
3
4
5
6
7
8
//行注释
//fmt.Println("Hello!")

/*块注释*/
/*
fmt.Println("Hello!")
fmt.Println("World!")
*/
  • 同样的块注释也不可以嵌套比如下面的代码会报错
1
2
3
4
5
6
7
/*块注释
/*
fmt.Println("Hello!")
fmt.Println("World!")
*/
*/
syntax error: unexpected /, expecting expression

2.1.2 标识符

标识符需要使用字母为开头的,使用Unicode编码分类中的任何字符组成.
标识符不可以同关键字的名称相同.
标识符区分大小写,下面几个各不相同

1
2
3
hello
Hello //其中该以大写字母开头的标识符是公开的,其他的为私有的.
hEllo

其中下划线’_’在go中为占位符,当在调用一个赋值操作的时候,使用占位符,则忽略该值,被赋值的值保持原来的值, 如下所示

1
2
count, err = fmt.Println(x) //获取打印的字节数和error值
count, _ = fmt.Println(x) //忽略error值

2.1.3 常量和变量

  • 变量声明与赋值

由于go是强类型的语言,变量使用前必须要进行声明和赋值,如果用户不进行赋值,则默认置为0(整形等)或””(字符串)或nil(指针),不用担心C语言中的垃圾值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//正确做法1
var i int
i = 10 //变量

//正确做法2
var i int = 10

//正确做法3, 由于赋值的时候可以通过赋值符号右边的值进行类型推倒
var i = 10

//正确做法4, 最简单的方法, :=表明声明为变量并进行类型推倒,最终赋值,于是可以省略var
i := 10

//错误示范1,在声明的时候没有指定类型
var i
i = 10

//错误示范2,不声明直接赋值
i = 10
  • 常量声明和赋值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//正确做法1
const x = 0
const y = 1
const z = 2

//正确做法2, 可以使用小括号的方式来声明一组变量
const (
x = 0
y = 1
z = 2
)

//正确做法3,将括号内声明的变量初始化为一个值,下面的x y z 均初始化为0
const {
x = 0
y
z
}

//正确做法4, 使用iota标识符进行初始化,
//iota是一个无类型整数常量,每次const关键字出现的时候,其值自增1
const {
x = iota
y
z
}
//即
const {
x = iota // 0
y = iota // 1
z = iota // 2
}


//错误1, :=符号无法用在const初始化中
const x := 1

//错误2, 未初始化完成就使用, 必须声明初始化一起完成
const x
x = 1

2.2 布尔值和布尔表达式

  • 布尔值:true和false
  • 布尔表达式:
1
2
3
4
5
!b
a||b
a&&b
x
x>y

需要注意的是==和!=可以比较任何两个类型,只要被比较的双方兼容这两个操作符
< <= >= >只能比较数字和字符串

2.3 数值类型

不同的类型之间不允许进行二进制运算和比较操作,在操作之前必须转为相同的类型

1
2
3
4
5
6
7
8
9
//错误1, 两个不同类型之间, 不可以进行运算
x := 1 //自动推断为int类型
y := int16(2)
z := x + y

//正确
x := 1
y := int16(2)
z := x + int(y)

其他的算术运算符

1
2
3
x++ //没有++x
x--
x /= y //x/y的结果返回给x,如果分母为0,发出异常,如果两个值为整数,丢弃余数

2.3.1整型

  • 有符号的类型
1
2
int int8 int32 int64
int//默认是int32或者是int64 依赖平台
  • 无符号的类型
1
2
3
4
uint uint8 uint32 uint64
byte//等于uint8
rune //等于uint32
uintptr//(32位下uint32 64位下uint64)

需要注意的是 默认使用int就足够,并且其速度是可以保证的
将小的整数转换为大整数总是安全的,但是如果向下转换会产生截断或者得到一个不可预期的值,如果想使用一个完美的精度,可以使用big.Rat或者big.Int类型,该类型只受限于机器的内存大小

参考

Go语言程序设计


版权声明:本文由littleji.com创作并发表,转载请注明作者及出处,欢迎关注公众号:littleji_com
本文遵守CC BY0SA 4.0
if you have any questions, please leave a message behind or give an issue

本文链接为:https://blog.littleji.com/2018/02/04/20180204ProgrammingInGo1/