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

实现加减乘除运算

传统办法实现:

var n1 float64 = 1.2var n2 float64 = 2.1var opt byte = '+'var res float64switch 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 utilsimport "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

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

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

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