golang学习笔记(二)go语言基础知识

文章时效性提示

这是一篇发布于 2566天前 的文章部分信息可能已经过时,请甄别后使用。

## 1、go语言中的关键字

go语言中一共有25个标识符(关键字)他们分别是:var、const、type、package、import、func、return、defer、go、select、interface、struct、break、case、continue、for、fallthrough、else、if、switch、goto、default、chan、type、map、range。
关键字的作用见文章末尾附录

2、go程序的组成

下面就是一个简单的go程序,从下面的源码我们可以看出,一个基本的go程序由以下几部分组成,分别是包的声明包的导入常量的定义变量的声明注释函数等组成,下面我们将详细的介绍go程序的组成部分。

2.1、包的声明

go语言中通过关键字package来声明一个包,语法:package <包名>

假如我们声明一个main包package main,需要注意的是,包的声明语句必须源码文件的最上面,不然编译器就会报错。注意:声明为main包的文件中必须存在一个mian方法(入口方法),并且一个程序中有且只有一个main包和main方法。

2.2、包的导入

2.2.1、基本方式导入包

导入包使用关键字import,语法import <包名>,例如导入fmttime包的语句:

1
2
import "fmt"
import "time"
GO

2.2.2、简写方式导入包

如果有时候需要导入的包比较多,通过上面的方式会写很多的import,所以我们也可以通过简便的方式导入多个包,同样是使用关键字import,然后使用一对圆括号将所有要导入的包名写在圆括号中,每个包占一行。
同时导入fmttime包的语句就变的简单了,如下:

1
2
3
4
import (
"fmt"
"time"
)
GO

注意:如果导入的包没有使用,编译器编译的时候就会出现编译异常,会提示让我们去掉没有使用的包。

2.2.3、包的重命名

有时候我们在使用自己写的程序包的时候,或者使用第三方程序包的时候,包名的重复在所难免,如果包名相同就会使程序运行出现错误,还有的时候我们觉的导入的包的名字比较长或者拼写比较麻烦,在这些场景下就可以通过包的重命名来重命名导入的包,举个例子:

1
2
3
4
5
6
7
8
9
package main

import (
out "fmt" //把fmt重命名为out
)

main(){
out.Println("hello world!!!") //控制台打印hello world!!!
}
GO

2.3、代码注释

代码注释也是go程序中的一部分。大型项目以后需要维护的时候,通过注释可以帮助我们快速理解程序。go语言的注释比较简单,和大多数编程语言差不多。

1
2
3
4
5
6
7
8
9
10
11
12
package main

import "fmt"

/**
** 这是多行注释
**/
func main(){

fmt.println("hello world!") //单行注释

}
GO

2.4、函数

go语言中通过关键字func来声明一个函数,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import "fmt"

/**
** 声明一个自定义函数
**/
func myfunc(i int) int{
return 2 * i
}

func main(){
var r int=myfunc(1) //调用函数 并接受返回值
fmt.Println(r) //打印返回值为2
}
GO

2.5、变量的声明

go语言中通过关键字var <变量名> <变量类型>来声明变量。

声明一个变量并且赋值

1
var i int=10 //声明一个整形变量,并且为它赋值为10
GO

声明多个变量和赋值

1
2
var i,j int=10,20  //声明两个整型变量i和j并且赋值为i=10和j=20

GO

简写方式声明多个变量(只适用于全局变量)

1
2
3
4
5
var (
id int
name string
sex bool
)
GO

同时声明了三个变量整型变量id,字符串类型变量name,和bool类型的变量sex

不指定变量类型来声明变量,声明变量的时候不指定类型,通过初始化值来确定变量的类型(这点和使用javascript,python的动态语言的用法很类似)

1
var b=true;   //声明一个变量b,为它赋值true,所以它的类型应该是bool型的。
GO

简写方式变量声明和赋值(只适用于局部变量)

1
name :="李明" //等价于 var name string="liming"
GO

2.5.1、声明全局变量

在函数体外声明的变量都是全局变量,全局变量可以在所有的函数中使用。

1
2
3
4
5
6
7
8
9
package main

import "fmt"

var param string = "这是一个全局变量,所有函数中都可以使用"

func main(){
fmt.Println(param)
}
GO

注意:全局变量的声明不能省略var关键字

2.5.2、声明局部变量

在函数体内定义的变量都是局部变量,包括函数的参数和返回值参数。它们只能在当前函数使用。

1
2
3
4
5
6
7
8
9
10
11
package main

import "fmt"

func myfunc(){
var param string = "这是一个局部变量,变量的作用域在此函数中有效"
}

func main(){
fmt.Println(param) // 报错 "undefined: param"
}
GO

在函数作用域中使用不会报错

1
2
3
4
5
6
7
8
9
10
11
12
package main

import "fmt"

func myfunc(){
var param string = "这是一个局部变量,变量的作用域在此函数中有效"
fmt.Println(param) // 打印param的值
}

func main(){
myfunc()
}
GO

全局变量和局部变量可以重名,但是局部变量的优先级要高于全局变量。

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

import "fmt"

var param string = "这是一个全局变量,该变量可以在所有函数中使用"

func myfunc(){
var param string = "这是一个局部变量,变量的作用域在此函数中有效"
fmt.Println(param) // 打印出 "这是一个局部变量,变量的作用域在此函数中有效"
}

func main(){
myfunc()
}
GO

3、go语言中访问控制

go语言中没有private,public关键字,那么我们该如何控制访问权限?go语言中通过约束命名(命名大小写)来实现对常量,变量,函数,接口,类型是否可以在外部包中使用。

3.1、private类型

go语言中约定如果命名首字母小写那么它就是private的,只能在当前包中可见。

3.2、public类型

go语言中约定如果命名首字母大写那么它就是public的,所有包中可见。现在我们就知道了为什么打印控制台的语句fmt.Println('hello world')的方法Println首字字母是大写的了吧。

4、附录

4.1、go语言语句结尾的分号";"

go语言的语句结尾的分号可写可不写,因为编译器在编译源码的时候会默认在语句的结尾加上分号";",为了减少前键盘的次数,建议不要自己加分号。

4.2、go中关键字的解释

关键字 作用
var和const 变量和常量的声明
package和import 包的声明和导入
func 声明函数和方法
return 定义函数返回值
defer 延时执行
go 用于并发编程
select 用于选择不同类型的通讯
interface 定义接口
struct 定义抽象数据类型
break、case、continue、for、fallthrough、else、if、switch、goto、default 流程控制
chan channel通讯
type 声明自定义类型
map 声明map类型数据
range 迭代slice、map等数据

golang学习笔记(二)go语言基础知识
https://think.geekfanfan.com/2017/01/10/studygo-02-go-basic/
作者
梦想.家
发布于
2017年1月10日
许可协议