Go语言中总共有25个关键字,如下所示:

go语言type关键字 go语言关键字详解_GO

Go关键字按类型不同做如下区分(注:图片来自网络,若有侵权,请联系删除):

go语言type关键字 go语言关键字详解_go语言type关键字_02


1. 基本结构类

1.1变量与常量

(1) Var

作用:定义变量

举例:

var x int=4 or x:=4

注意:a.在函数中,:= 简洁赋值语句在明确类型的前提下,可以用于替代b.:= 结构不能使用在函数外,函数外的每个语法块都必须以关键字开始。

演示:

package main

import (   

    "fmt"

)

func main() {

 

    var x int = 4

    fmt.Println(x)//输出4

    fmt.Println(&x)//输出指针

    //fmt.Println(*x) //错误

    y := 4

    

    fmt.Println(y)//输出4

    fmt.Println(&y)//输出指针

    //fmt.Println(*y) //错误

 

   var v *int = new(int)//返回值为指针

    fmt.Println(*v)//输出为0,它只是将内存清零,而不是初始化内存

*v = 4//赋值

    fmt.Println(v)//输出指针

    fmt.Println(*v)//输出4

    z := new(int)//代替var v *int = new(int)

    *z = 3

    fmt.Println(z)//输出指针

    fmt.Println(*z)//输出3

}



(2) Const

作用:定义常量

定义: 

const identifier [type] = value

a.[type]类型可以省略,编译器可以根据变量的值来推断其类型.

显示类型:const b string = "abc"
隐式类型:const b = "abc"

b.多个相同类型的声明可以简写为:

const name1 , name2  = value1 , value2

演示:

package main

import "fmt"

 

func main()  {

    //长度 int  3

    const LENGTH int = 3

    //宽度 int 2

    const  WIDTH int = 2

    //面积 int

    var AREA int

    //多重赋值 int ,bool,字符串

    const  a,b,c = 1 , true , "str"

    //求面积

    AREA = LENGTH * WIDTH

    //输出面积

    fmt.Printf("面积为 : %d\n" ,AREA)

    //输出a,b,c

    fmt.Println(a,b,c)

}



1.2“包”管理

(1)Package

作用:包管理

a. package是golang最基本的分发单位和工程管理中依赖关系的体现。

b. 每个golang源代码文件开头都拥有一个package声明,表示该golang代码所属的package。

c. 要生成golang可执行程序,必须建立一个名为main的package,并且在该package中必须包含一个名为main()的函数。

d. 在golang工程中,同一个路径下只能存在一个package,一个package可以拆成多个源文件组成。

 

(2 )Import

作用:导入

关键字导入的是package路径

的目录名和源文件中使用的package名一致容易造成import关键字后即是package名的错觉,真正使用时,这两者可以不同。

举例:

“fmt”最常用的一种形式

“./test”导入同一目录下test包中的内容

“fmt”导入fmt,并给他启别名f

“fmt”,将fmt启用别名”.”,这样就可以直接使用其内容,而不用再添加fmt,如fmt.Println可以直接写成Println

“fmt” 表示不使用该包,而是只是使用该包的init函数,并不显示的使用该包的其他内容。注意:这种形式的import,当import时就执行了fmt包中的init函数,而不能够使用该包的其他函数。

 

2. 基本组件类

2.1函数类

(1) Func

作用:定义函数

定义:

func (p myType ) funcName ( a, b int , c string ) ( r , s int ) {

    	return

}

注:关键字——func

      方法名——funcName

      参数——— a,b int,b string

      返回值—— r,s int

      函数体—— {}

演示:

//判断a是否等于b

func (a double) IsEqual(b double) bool {

  	var r = a - b

    	if r == 0.0 {

        	return true

    	} else if r < 0.0 {

        	return r > -0.0001

    	}

    	return r < 0.0001

}



(2) Return

作用:用于在函数内部,退出函数执行过程

应用:

a.退出函数执行过程,不指定返回值

通常有两种情况不需要指定返回值退出函数执行过程。第一是:函数没有返回值;第二是:函数返回值有变量名,不需要显示的指定返回值。

package main

import (

    "fmt"

)

func say(flag bool) {

    if !flag {

        fmt.Println("false")

        return

    }

    fmt.Println("没有返回值")

}


func getStatus() (num int) {

    // num是在返回值中定义的变量

    num = 100

    return

}

 

func main() {

    say(true)

    say(false)

    fmt.Println(getStatus())

}

b.退出函数执行过程,并指定返回值

当函数有返回值时,如果返回值没有定义变量,那么一定要使用return加上返回值退出函数。如下:

package main



import (

    "fmt"

)

 

// getMsg函数需要返回一个string类型值

func getMsg() string {

    return "hello"

}

 

func main() {

    fmt.Println(getMsg())

}



延伸:

a. 在返回值中定义变量,而return其它结果

在函数定义时,虽然在返回值中定义了变量,但是在return出函数时,指定另外的变量作为返回结果,这样也是可行的,但是意义却不大。如下:

package main

import (

    "fmt"

)

 

func getMsg() (msg string) {

    msg = "world"

    return "hello"

}

 

func main() {

    fmt.Println(getMsg())

}



b. 在函数递归调用中使用return

递归调用,就是函数在函数体内调用自身。函数在没有结束之前,调用自身,表示嵌套层级增加一层。各个调用层中,函数执行完成,表示这一层执行完成。在函数递归调用中使用return,只会退出当前这一层的函数执行,并不会结束其他层的函数执行过程。使用return可以结束函数执行过程,阻止函数体内后边的代码执行。将对自身的调用写在return后边,可以停止函数的递归调用。如下:

package main

 

import (

    "fmt"

)

 

func getMsg(index int) {

    if index == 5 {

        fmt.Println("递归调用嵌套层级达到5层,结束递归")

        return

    }

 

    fmt.Println("递归调用层级是:", index)

    getMsg(index + 1)

}

 

func main() {

    var index = 1

    getMsg(index)

}