Go语言基础函数包的使用学习

 更新时间:2023年05月23日 10:33:14   作者:甜点cc  
本文通过一个实现加减乘除运算的小程序来介绍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/src 或 GOROOT/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

包的注意事项

包名建议跟目录名保持一致,也可以不一致

import "包名"

这个包名,就是 package "包名" 定义的包名,跟目录名字没有关系,倘若 package 定义的名字跟目录名不一致,引入包的时候,要以package定义的包名为准。

  • package "包名" 必须在文件的第一行,然后再 import
  • 引包路径, GOPATH or GOROOT src目录下, env.GO111MODULE
  • 包里面要暴露的函数,函数名必须大写,表示可导出
  • 如果包名比较长,go支持取别名,定义别名之后,原先的包名就不好使了
  • 在同一个包下,不允许有相同的函数名
  • 如果要编译成一个可执行程序文件,就需要将这个包声明为 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()

以上就是Go语言基础函数包的使用学习的详细内容,更多关于Go语言函数包的资料请关注脚本之家其它相关文章!

相关文章

  • golang中defer的关键特性示例详解

    golang中defer的关键特性示例详解

    defer是golang语言中的关键字,用于资源的释放,会在函数返回之前进行调用。下面这篇文章主要给大家介绍了关于golang中defer的关键特性,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • Go语言题解LeetCode455分发饼干示例详解

    Go语言题解LeetCode455分发饼干示例详解

    这篇文章主要为大家介绍了Go语言题解LeetCode455分发饼干示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 浅析Go项目中的依赖包管理与Go Module常规操作

    浅析Go项目中的依赖包管理与Go Module常规操作

    这篇文章主要为大家详细介绍了Go项目中的依赖包管理与Go Module常规操作,文中的示例代码讲解详细,对我们深入了解Go语言有一定的帮助,需要的可以跟随小编一起学习一下
    2023-10-10
  • 一文了解Go语言中编码规范的使用

    一文了解Go语言中编码规范的使用

    这篇文章主要介绍了一文了解Go语言中编码规范的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • go常用指令之go mod详解

    go常用指令之go mod详解

    当go命令运行时,它查找当前目录然后查找相继的父目录来找出 go.mod,下面这篇文章主要给大家介绍了关于go常用指令之go mod的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 使用Go进行单元测试的实现

    使用Go进行单元测试的实现

    这篇文章主要介绍了使用Go进行单元测试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 用Go+Vue.js快速搭建一个Web应用(初级demo)

    用Go+Vue.js快速搭建一个Web应用(初级demo)

    这篇文章主要介绍了用Go+Vue.js快速搭建一个Web应用(初级demo),本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友参考下吧
    2017-11-11
  • Goland和IDEA换行符的设置方式

    Goland和IDEA换行符的设置方式

    这篇文章主要介绍了Goland和IDEA换行符的设置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Goland 关闭自动移除未使用的包操作

    Goland 关闭自动移除未使用的包操作

    这篇文章主要介绍了Goland 关闭自动移除未使用的包操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • golang 字符串拼接方法对比分析

    golang 字符串拼接方法对比分析

    这篇文章主要为大家介绍了golang 字符串拼接方法对比分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论