最新使用Python编写一些处理脚本,感觉与golang之间的语法开始模糊,因此决定根据官方文档,写一下golang的入门教程,顺便复习一下相关语法巩固基础。

包是golang里的最基本组成部件,go程序就是由一个个包组装起来的,例如程序入口main包。

如何定义一个包,只要使用package关键字就行了,在go文件的第一行设定包名。

1
2
3
4
5
package me

func do(){
    // code ...
}

需要注意的是,一个文件夹下面直接包含的文件只能属于一个包,同样一个包的文件不能在多个文件夹下。

另一个需要注意的问题是包的导入流程,每个包都可以拥有一个特殊函数init(),当包导入时,首先执行全局变量的构建,之后执行包的默认初始化函数init

导入

包的导入,使用关键字import,具体使用如下,注意示例中常用的几种情况。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 单个包导入
import "fmt"

// 多个包导入
import (
    "fmt"
    "io"
)
// 定义别名
import m "fmt"
// 匿名导入
import _ "io"

导出

在包中,如果函数和变量是大写字母开头的,则是可以导出的函数和变量,即可以通过导入包,在外部使用包中对应的函数和变量。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// me/me.go
package me

func Do() int{
    return 42
}

// main.go
package main

import "me"

func main(){
    me.Do()
}

函数

编程语言具有的基本组件——函数,通常将多次复用的代码块抽离为一个函数,多个调用方通过函数调用,实现具体逻辑,这样方便项目维护,代码逻辑上的统一管理。

go语言中函数定义使用关键字func,后面接入参与出参,具体定义使用如下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
func add(x int, y int) int {
	return x + y
}
// 相同类型参数可以缩写
func add2(x , y int) int {
	return x + y
}
// 多返回值的函数
func swap(x, y string) (string, string) {
	return y, x
}
// 带返回变量名的函数
func split(sum int) (x, y int) {
	x = sum * 4 / 9
	y = sum - x
	return
}

上面最后一个用例,带返回变量名的函数,函数最后直接return,不需要再写明返回变量名,注意,这样虽然简便,但日常开发中,业务逻辑复杂的时候,返回点多时这样的简略写法不利于代码阅读,因此不推荐使用。

在go语言中,函数也可以作为参数

变量

go语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。声明变量的一般形式是使用 var 关键字,例如var name string,可以发现go语言的变量定义,变量类型是放在变量名之后的。同样,当我们定义多个相同类型的变量时,可以使用如下方法:

1
var a,b,c int

变量定义之后如何初始化?我们使用=赋值符号进行操作,例如var name string = "ww",定义变量类型后使用=符号直接进行初始化,此外我们也可以使用:=进行直接定义并赋值。

1
2
3
// 两种赋值等价
a := "abc"
var a string = "abc"

在使用:=符号时,go语言会基于右边的数据进行变量类型的判断,此外需要注意,不能重复定义已经存在的变量名。

1
2
3
4
b := 10
// 不能重复定义变量,以下语句会报错
b := "abc"
a,b := 'a','b'

类型

go语言中定义的默认类型有以下几种

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8类型的别名

rune // int32类型的别名

float32 float64

complex64 complex128

需要注意的是,int uint uintptr这三种类型都是基于操作系统,如果是32位操作系统,则int对应的就是32 bits,同理64位操作系统,int对应的是64 bits。

定义了基础类型,不得不说默认值的问题,数值型的类型默认零值就是0,bool类型的默认值是false,而字符串类型的默认值就是空字符串""

针对基础类型,我们可以使用以下方法,实现类型转换:

1
2
3
4
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
var j int = int(u)

常量

常量的声明使用const关键字,例如const pi = 3.1415926。常量的声明可以是字符、字符串、布尔、数值类型,此外常量不能使用:=定义。

运算符

go语言内置的运算符有以下几种,算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符。

算术运算符: + - * / % ++ –

关系运算符: == != > < >= <=

逻辑运算符: && || !

位运算符: & | ^ << >>

赋值运算符: = += -= *= /= %= <<= >>= &= ^= |=

其他运算符: & * ()

具体表优先级由高到低如下排序:

优先级 运算符
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||

参考资料