乐趣区

关于思否技术征文:Go-函数包的使用

本文通过一个实现加减乘除运算的小程序来介绍 go 函数的应用,以及应用函数的注意事项,并引出了对包的理解和应用。

实现加减乘除运算

传统办法实现:

var n1 float64 = 1.2
var n2 float64 = 2.1
var opt byte = '+'
var res float64

switch opt {
    case '+':
    res = n1 + n2
    case '-':
    res = n1 - n2
    case '*':
    res = n1 * n2
    case '/':
    res = n1 / n2
    default:
    fmt.Println("不非法的运算符")
}
fmt.Printf("res=%v", res)

以上代码的问题:

  • 需要变更,取模,代码不够灵便
  • 不利于保护
  • 代码冗余

函数能够解决这个问题

  • 封装
  • 传参调用
  • 返回值

函数根本语法

func 函数名 (形参列表) (返回值列表) {

执行语句

return 返回值列表

}

下面代码改写:

func calc(n1 float64, n2 float64, opt byte) float64 {
    var res float64
    switch opt {
    case '+':
        res = n1 + n2
    case '-':
        res = n1 - n2
    case '*':
        res = n1 * n2
    case '/':
        res = n1 / n2
    default:
        fmt.Println("不非法的运算符")
    }
    return res
}

func main() {fmt.Println("hello fn")
    var n1 float64 = 1.2
    var n2 float64 = 2.1
    var opt byte = '+'
    var result float64 = calc(n1, n2, opt)
    fmt.Printf("%T %v \n", result, result)
}

函数的问题

一个文件里呈现超级多的函数

utils.go 文件,专门用于定义函数,让其它文件来调用,工具函数的封装,

db.go 文件,专门定义对数据库操作的函数

main.go 文件,引入其它文件,应用工具函数,代码更专一

继而引出包的概念,分门别类 的应用,也有利于多人协同开发,雷同的函数名能够存在不同的包上面

包的原理

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

包的介绍

go 的每一个文件都属于一个包的,也就是说 go 以包的模式来管理文件和我的项目目录构造的。

大写字母结尾的标识符,示意该标识符可导出

作用:

  • 辨别雷同名字的函数、变量等标识符
  • 当程序文件很多时,很好的治理我的项目
  • 管制函数、变量的拜访范畴,即作用域

语法

package util

引入应用(封装实现加减乘除的工具函数)

包名. 函数名

省略 GOPATH/srcGOROOT/src,前提是在 env.GO111MODULE=off 的状况下

import "包的门路"
// GOPATH or GOROOT src, env.GO111MODULE=off
  • utils/utils.go 文件

    package utils
    
    import "fmt"
    
    // 标识符大写,示意可导出
    func Calc(n1 float64, n2 float64, opt byte) float64 {
      var res float64
      switch opt {
      case '+':
          res = n1 + n2
      case '-':
          res = n1 - n2
      case '*':
          res = n1 * n2
      case '/':
          res = n1 / n2
      default:
          fmt.Println("不非法的运算符")
      }
      return res
    }
  • main/main.go 文件
import (
    "fmt"
    "go_code/fndemo1/utils"
)

func main() {
  var n1 float64 = 1.233
    var n2 float64 = 2.111
    var opt byte = '+'
    var result float64 = utils.Calc(n1, n2, opt)
    fmt.Printf("%T %.2f= \n", result, result)
}

// %.2f   默认宽度,精度 2
// float64 3.34

包的注意事项

  1. 包名倡议跟目录名保持一致,也能够不统一

    import "包名"

    这个包名,就是 package “ 包名 ” 定义的包名,跟目录名字没有关系,假使 package 定义的名字跟目录名不统一,引入包的时候,要以 package 定义的包名为准。

  2. package “ 包名 ” 必须在文件的第一行,而后再 import
  3. 引包门路,GOPATH or GOROOT src 目录下,env.GO111MODULE
  4. 包外面要裸露的函数,函数名必须大写,示意可导出
  5. 如果包名比拟长,go 反对取别名,定义别名之后,原先的包名就不好使了
  6. 在同一个包下,不容许有雷同的函数名
  7. 如果要编译成一个可执行程序文件,就须要将这个包申明为 main

进入我的项目根目录(go build 的执行环境就是运行命令的目录)

go build go_code/fndemo1/main , 在根目录会生成 main.exe 可执行文件

go build -o bin/my.exe go_code/fndemo1/main-o示意输入的目录,没有则会主动创立

import (
    "fmt"
    util "go_code/fndemo1/utils"
)
// 应用
util.Calc()

我是 甜点 cc

酷爱前端开发,也喜爱专研各种跟本职工作关系不大的技术,技术、产品趣味宽泛且浓重。本号次要致力于分享集体经验总结,心愿能够给一小部分人一些渺小帮忙。

心愿能和大家一起致力营造一个良好的学习气氛,为了集体和家庭、为了我国的互联网物联网技术、数字化转型、数字经济倒退做一点点奉献。数风流人物还看中国、看今朝、看你我。

本文参加了思否技术征文,欢送正在浏览的你也退出。

退出移动版