• 函数和包


    为完成某一功能的程序指令(语句)的集合,称为函数。
    在Go中,函数分为:自定义函数、系统函数(查看Go编程手册)


    基本语法:

    func 函数名 (形参列表) (返回值类型列表) {
      执行语句...
      return 返回值列表
    }

    1)形参列表:表示函数的输入
    2)函数中的语句:表示为了实现某一功能代码块
    3)函数可以有返回值,也可以没有


    案例:

    //将计算的功能,放到一个函数中,然后在需要使用,调用即可
    func cal(n1 float64, n2 float64, operator byte) float64 {
      var res float64
      switch operator {
        case '+' :
          res = n1 + n2
        case '-' :
          res = n1 - n2
        case '*' :
          res = n1 * n2
        case '/' :
          res = n1 / n2
        default :
          fmt.Println("操作符号错误...")
      }
      return res
    }
    func main() {

      n1 := 1.2
      n2 := 2.3
      var operator byte = '+'
      result := cal(n1 , n2 , operator)   //调用cal函数并传了3个参数
      fmt.Println("result=", result)
    }


    先看一个需求:

    1)在实际的开发中,我们往往需要在不同的文件中,去调用其他文件的定义的函数,比如main.go中,去使用utils.go 文件中的函数,如何实现?

    2)现在有两个程序员共同开发一个Go项目,程序员xiaoming希望定义函数cal,程序员xiaoqiang想定义函数也叫cal。两个程序员为此还吵了起来,怎么办?


    包的本质实际上就是创建不同的文件夹,来存放程序文件。

    包的基本概念:

    说明:go的每一个文件都是属于一个包的,也就是说go是以包的形式来管理文件和项目目录结构的

    包的三大作用:

      1)区分相同名字的函数、变量等标识符
      2)当程序文件很多时,可以很好的管理项目
      3)控制函数、变量等访问范围,即作用域

    包的相关说明:

      打包基本语法:
      package 包名

      引入包的基本语法:
      import “包的路径”


    包使用的快速入门:

    main包的内容:

    package main

    import (
      "fmt"
      "chapter04/demo1/utils"
    )

    func main() {

      n1 := 1.2
      n2 := 2.3
      var operator byte = '+'
      result := utils.Cal(n1 , n2 , operator) //调用cal函数
      fmt.Println("result=", result)

      n1 = 4.5
      n2 = 6.7
      operator = '*'
      result = utils.Cal(n1 , n2 , operator)
      fmt.Printf("result=%.2f", result)

    }


    utils包:

    package utils
    import "fmt"

      //将计算的功能,放到一个函数中,然后在需要使用,调用即可
      //为了让其它包的文件使用Cal函数,需要将C大小类似其他语言的public
    func Cal(n1 float64, n2 float64, operator byte) float64 {
      var res float64
      switch operator {
        case '+' :
          res = n1 + n2
        case '-' :
          res = n1 - n2
        case '*' :
          res = n1 * n2
        case '/' :
          res = n1 / n2
        default :
          fmt.Println("操作符号错误...")
      }
      return res
    }

    包的注意事项和细节说明:

    1)在给一个文件打包时,该包对应一个文件夹,比如种类的utils 文件夹对应的包名就是utils,文件的包名通常和文件所在的文件夹名一致,一般为小写字母。

    2)当一个文件要使用其它包函数或变量时,需要先引入对应的包
      1. 引入方式1:import “包名”
      2. 引入方式2:
      import (
        "包名"
        "包名"
      )

      3. package 指令在文件第一行,然后是import 指令
      4. 在import 包时,路径从$GOPATH 的 src 下开始,不用带src,编译器会自动从src下开始引入

    3)为了让其它包的文件,可以访问到本包的函数,则该函数名的首字母要大写。类似其他语言的public,这样才能跨包访问。比如 utils.go 的Cal函数

    4)在访问其它包函数或变量时,其语法是 包名.函数名,比如这里的main.go文件中 utils.Cal(90,80,"+")

    5)如果包名较长,Go支持给包取别名,注意细节;取别名后,原来的包名就不能使用了。

     

    6)在同一包下,不能有相同的函数名(也不能有相同的全局变量名),否则报重复定义

    7)如果你要编译成一个可执行的程序文件,就需要将这个包声明为 main,即 package main 。这个就是一个语法规范,如果你是写一个库,包名可以自定义。

    怎么编译文件:
    go build -o binmy.exe chapter04demo1main
    意思就是把chaper04demo1main文件夹打包,放到bin目录下叫做my.exe的名字。-o 表示输出

  • 相关阅读:
    前端经典面试题解密:JS的new关键字都干了什么?
    前端经典面试题解密-add(1)(2)(3)(4) == 10到底是个啥?
    JavaScript模块化-CommonJS、AMD、CMD、UMD、ES6
    关于面试题:[1, 2, 3].map(parseInt)问题的剖析
    浅析API和SDK
    重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)
    重读《学习JavaScript数据结构与算法-第三版》- 第5章 队列
    重读《学习JavaScript数据结构与算法-第三版》- 第4章 栈
    重读《学习JavaScript数据结构与算法-第三版》- 第3章 数组(二)
    FreeSql (三十五)CodeFirst 自定义特性
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11343472.html
Copyright © 2020-2023  润新知