美文网首页
Go | 函数(包)的使用

Go | 函数(包)的使用

作者: 甜点cc | 来源:发表于2022-11-06 20:09 被阅读0次

本文通过一个实现加减乘除运算的小程序来介绍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

热爱前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。

希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。

相关文章

  • ggplot2绘制GO富集分析柱状图

    1.使用clusterProfiler包进行GO富集分析使用clusterProfiler的enrichGO函数来...

  • Go | 函数(包)的使用

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

  • 第02天(函数、工程管理)_03

    11_函数类型.go 12_回调函数.go 13_匿名函数和闭包.go 14_闭包捕获外部变量的特点.go 15_...

  • 【go语言学习】函数function

    函数是组织好的、可重复使用的、用于执行指定任务的代码块。Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属...

  • 26. 函数闭包

    如果非必要,尽量不要在程序中使用闭包。go函数可以是一个闭包。闭包是一个函数值,它引用了函数体之外的变量。这个函数...

  • 08. Go极简教程 函数及闭包

    Golang中, 函数是一等公民, 以下简要描述函数的使用 函数的声明 闭包 引用官方的解释: Go 函数可以是闭...

  • GO 导入自定义包

    一 导入的包里不能带有 main 函数,否则会报下面的错误 代码 go mod 使用go mod 管理各种依赖,当...

  • 理解go中的init函数

    本文主要介绍go中init函数的使用及意义。 I、init的几个特征 1、init函数用于包的初始化,如初始化包中...

  • Golang学习笔记-函数

    Go函数定义格式如下: 例如: Go可以很灵活的创建函数,并作为另外一个函数的实参: Go支持匿名函数,可作为闭包...

  • 13. Go语言基础之函数

    前言 函数是组织好的、可重复使用的、用于执行指定任务的代码块。Go语言中支持函数、匿名函数和闭包 13.1 函数 ...

网友评论

      本文标题:Go | 函数(包)的使用

      本文链接:https://www.haomeiwen.com/subject/hdritdtx.html