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

作者 梦想.家 日期 2017-01-10 字数 2,225
golang学习笔记(二)go语言基础知识

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程序的组成部分。

	package main  #声明包

	import "fmt"  #导入包

	const ID int = 100
		
	var userName string = "李明"  #声明一个全局变量userName并且赋值

	func main(){
	     fmt.Println("hello world!!!");
	}

2.1、包的声明

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

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

2.2、包的导入

2.2.1、基本方式导入包

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

	import "fmt"
	import "time"

2.2.2、简写方式导入包

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

	import (
	     "fmt"
	     "time"
	)

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

2.2.3、包的重命名

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

	package main
	import (
		out "fmt"  //把fmt重命名为out		     	
	)
	main(){
		out.Println("hello world!!!")  //控制台打印hello world!!!		
	}

<!--因为go语言的原码编码类型unicode所以重命名的包名可以是中文,但是避免不必要的问题建议不要使用中文重命名包。-->

2.3、代码注释

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

	package main

	import "fmt"

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

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

	}

2.4、函数

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

	package main

	import "fmt"

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

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

2.5、变量的声明

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

声明一个变量并且赋值

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

声明多个变量和赋值

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

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

	var (
	   id int
	   name string
	   sex bool     
	)

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

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

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

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

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

2.5.1、声明全局变量

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

	package main

	import "fmt"

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

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

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

2.5.2、声明局部变量

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

	package main

	import "fmt"

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

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

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

	package main

	import "fmt"

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

	func main(){
	    myfunc()
	}

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

	package main

	import "fmt"

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

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

	func main(){
	    myfunc()
	}

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流程控制
chanchannel通讯
type声明自定义类型
map声明map类型数据
range迭代slice、map等数据



本文完

本文如有误,请不吝赐教!

原文标题:golang学习笔记(二)go语言基础知识

原文链接:http://www.mengxiangjia.info/2017/01/10/studygo-02-go-basic/

版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0