前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go | 函数(包)的使用

Go | 函数(包)的使用

作者头像
甜点cc
发布2022-11-16 16:25:33
3450
发布2022-11-16 16:25:33
举报

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

实现加减乘除运算

传统方法实现:

代码语言:javascript
复制
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 返回值列表

}

上面代码改写:

代码语言:javascript
复制
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以包的形式来管理文件和项目目录结构的。

大写字母开头的标识符,表示该标识符可导出

作用:

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

语法

代码语言:javascript
复制
package util

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

包名.函数名

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

代码语言:javascript
复制
import "包的路径"
// GOPATH or GOROOT src, env.GO111MODULE=off
  • utils/utils.go 文件
代码语言:javascript
复制
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 文件
代码语言:javascript
复制
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表示输出的目录,没有则会自动创建

代码语言:javascript
复制
import (
	"fmt"
	util "go_code/fndemo1/utils"
)
// 使用
util.Calc()

我是 甜点cc

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现加减乘除运算
  • 函数基本语法
  • 函数的问题
  • 包的原理
  • 包的介绍
    • 作用:
      • 语法
        • 引入使用(封装实现加减乘除的工具函数)
        • 包的注意事项
        相关产品与服务
        云开发 CloudBase
        云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档