go笔记

1、包

所有可执行的go程序,都必须包含一个main函数,这是运行一个程序的入口。main函数应该放在main包中

  • 指定一个文件属于哪个包(放置于文件的首行)

    语法: package 包名

在src目录中创建一个包名为geometry 的包,写下以下代码

// geometry.go
package main

import (
    "fmt"
)

func main() {   
    fmt.Println("主函数")
}

执行go install geometry,会在bin目录下生成名为geometry的exe文件,这边是执行程序的入口文件

注:go install geometry命令会在geometry文件夹中搜索拥有main函数的文件

此时的目录结构为:

1571020129615.png

执行:workpathbingeometry 会输出:主函数

注:workpath为工作目录

2、创建自定义包

创建一个包来计算矩形的面积和对角线

属于某一个包的源文件都应该放置于一个单独命名的文件夹里。按照 Go 的惯例,应该用包名命名该文件夹。

geometry 文件夹中创建一个rectangle 文件夹。

package rectangle

import "math"

//计算矩形面积
func Area(len, wid  float64) float64{
    area := len * wid
    return area
}

//计算矩形对角线
func  Diagonal(len , wid  float64) float64  {
    diagonal := math.Sqrt((len * len) + (wid * wid))
    return diagonal
}

3、导入自定义包

// geometry.go
package main

import (
    "fmt"
    "geometry/rectangle"  //导入自定义的包
)

func main() {
    var len, wid float64 = 3,4
    fmt.Println("主函数")

    //计算矩形面积
    fmt.Printf("矩形的面积为 %.2fn", rectangle.Area(len, wid)) //调用计算面积的函数

    //计算矩形对角线
    fmt.Printf("对角线为 %.2f", rectangle.Diagonal(len, wid))  //调用计算对角线的函数
}

注:自定义包里要被调用的函数和变量 首字母必须大写,否则会报错

4、init函数

所有包都可以包含一个 init 函数。init 函数不应该有任何返回值类型和参数

按照上面的例子,我们先在rectangle包的rectangle.go 增加init函数

package rectangle

import (
    "math"
    "fmt"
)
//初始化函数
func init(){
    fmt.Println("这是rectangle包的init函数");
}

//计算矩形面积
func Area(len, wid  float64) float64{
    area := len * wid
    return area
}

//计算矩形对角线
func  Diagonal(len , wid  float64) float64  {
    diagonal := math.Sqrt((len * len) + (wid * wid))
    return diagonal
}

接着在geometry.go增加init函数

// geometry.go
package main

import (
    "fmt"
    "geometry/rectangle"
    "log"
)

//包级别变量
var rectLen, rectWidth float64 = 6, 7

func init(){
    println("这是主函数的init函数")
    //在这里初始化包级别的变量,如果小于0则输出提示消息并终止程序运行
    if rectLen 

包的初始化顺序如下:

  1. 首先初始化包级别(Package Level)的变量
  1. 紧接着调用 init 函数。包可以有多个 init 函数(在一个文件或分布于多个文件中),它们按照编译器解析它们的顺序进行调用。

如果一个包导入了另一个包,会先初始化被导入的包。

尽管一个包可能会被导入多次,但是它只会被初始化一次。

执行go install geometry -》bingeometry

输出:

1571126840243.png

由此可见,是先执行了导入包的初始化init函数,然后再执行主函数的init函数,然后才到主函数

如果保级别变量改为负数,例如rectLen = -6

输出:

1571126965628.png

5、使用空白标识符来解决导入包但未使用包时报错

  • 导入包,但是没有使用包里的任何函数或者变量
// geometry.go
package main

import (
    "fmt"
    "geometry/rectangle"
    "log"
)

//var _  = rectangle.Area // 如果不是用这一行,编译的时候将报错

func main() {
    fmt.Println("主函数")
}

1571127866803.png
  • 导入包,但是只需要初始化包,却不调用包的函数、
// geometry.go
package main

import (
    "fmt"
    _ "geometry/rectangle"  //得在前面写个“_”才不会报错
    "log"
)


func main() {
    fmt.Println("主函数")
}

5、if…else if…else语句

  • 语法1:
if condition {
    //todo
}else if condition{
    //todo
}else{
    //todo
}
  • 语法2:
if 语句; condition {
    //todo
}
语句的作用域范围只限于if…else代码块

语句的作用域范围只限于if…else代码块

6、for循环

  • 语法:for [initialisation]; condition; [post]{}

initialisation: 初始化,初始化语句只执行一次(可选)

condition: 条件 ,为true则执行{}里内容

post:在每次成功循环迭代后执行(可选)

  • break

    用于终止循环

  • continue

    用于跳出某次循环

  • for 循环中可以声明和操作多个变量。

package main

import "fmt"

func main(){
    for v1, v2 := 10, 1; v2 
  • 无限循环

语法:

for {
    
}

7、switch语句

  • 基本语法:
switch 变量 {
case 匹配项1 :
    //todo
case 匹配项2 :
    //todo
default:
    //todo
}
  • 多表达式判断语法:
switch 变量 {
case "匹配项1","匹配项2","匹配项3" :
    //todo
case 匹配项2 :
    //todo
default:
    //todo
}
  • 无表达式
switch  {
case 条件表达式1 :
    //todo
case 条件表达式2 :
    //todo
default:
    //todo
}
  • fallthrough语句

在 Go 中,每执行完一个 case 后,会从 switch 语句中跳出来,不再做后续 case 的判断和执行。使用 fallthrough 语句可以在已经执行完成的 case 之后,把控制权转移到下一个 case 的执行代码中。

switch  变量{
case 条件表达式1 :
    //todo
    fallthrough
case 条件表达式2 :
    //todo
    fallthrough
default:
    //todo
}

加油!学习中……

文章来源于互联网,如有雷同请联系站长删除:go笔记-Day2

发表评论