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/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()

我是 甜点cc
热爱前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。
希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。
Go | 函数(包)的使用的更多相关文章
- Jquery--JS的函数包
Jquery-----JS的函数包,直接来调用方法. 一.基本知识 用法:把jquery-1.7.2.js直接复制到要做的网站项目中,拖拽引用和JS用法一样. 二.选择器 [1]基本: 1.取ID:v ...
- 编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异
编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异 题目挺绕口的.C++ 11的好东西不算太多,但变参模板(Variadic Template)肯定是其中耀眼的一 ...
- 我的第一个python web开发框架(10)——工具函数包说明(一)
PS:原先是想直接进入功能开发,要用到什么函数时再创建,这样也容易熟悉每个函数的由来和使用方法,但考虑到这样操作,到时会经常在不同文件间切换,不好描述,容易造成混乱,所以还是使用函数库这种方式来说明. ...
- R语言实现SOM(自组织映射)模型(三个函数包+代码)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- SOM自组织映射神经网络模型 的R语言实现 笔 ...
- Go-数据类型以及变量,常量,函数,包的使用
Go-数据类型以及变量,常量,函数,包的使用 一.数据类型 1.字符串类型 string -双引号包裹的:"xxx" -反引号包裹,可以换行, 注意: 区别于python,是没有单 ...
- Go 函数,包(二)
#### Go 函数,包(二)***百丈峰,松如浪,地势坤,厚德载物之像*** 今天又到周五啦,你们有没有激动呢,反正我很激动,又有两天的自由了; 上一节我们学习了Go 的函数和包的一些知识 , 今天 ...
- 轻松创建R语言函数包
讲真,用R这么几年,始终未尝试过写自己的包,看来这就是我与真正程序员的差距了——编程习惯等于没有. 昨天一个偶然的机会想开始写自己的工具包,发现了前期教程的有一些过时.于是,写一个**windows* ...
- 我的第一个python web开发框架(11)——工具函数包说明(二)
db_helper.py是数据库操作包,主要有两个函数,分别是read()数据库读操作函数和write()数据库写操作函数.这个包的代码是从小戴同学分享的博文改造过来的. #!/usr/bin/env ...
- 我的第一个python web开发框架(13)——工具函数包说明(四)
string_helper.py是字符串操作包,主要对字符串进行检查.过滤和截取等处理. #!/usr/bin/evn python # coding=utf-8 import re def chec ...
- oracle 存储过程,存储函数,包,
http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过 ...
随机推荐
- 2019 CSP-S Ⅱ 游记
day0(试机) 第零天,重新打了一遍头文件和读优,熟悉了一下就匆匆走了. day1 T1一看到先把二分打了,然后发现long long要爆,好慌 主要是基础知识不够扎实,不知道unsigned lo ...
- windows优化原神
原神3.0新地图很卡顿? 锐距显卡带不动? 看一下我的配置 英特尔i5-1135G7 内存16GB可以拓展32GB 固态512GB 原神优化前帧率50左右 优化后59-60最差55 展示图原神设置图 ...
- QFile 对文件进行读写操作
QFile 对文件进行读写操作 1 QFile 进行读写操纵 2 QFile file(pah ) 文件路径 3 读 file.open(打开方式) file.readAll(). file.re ...
- OpenJudge 1.5.15 银行利息
15:银行利息 总时间限制: 1000ms 内存限制: 65536kB 描述 农夫约翰在去年赚了一大笔钱!他想要把这些钱用于投资,并对自己能得到多少收益感到好奇.已知投资的复合年利率为R(0到20之间 ...
- Java学习笔记:基本输入、输出数据操作实例分析
Java学习笔记:基本输入.输出数据操作.分享给大家供大家参考,具体如下: 相关内容: 输出数据: print println printf 输入数据: Scanner 输出数据: JAVA中在屏幕中 ...
- Kubernetes DevOps: Jenkins
提到基于 Kubernete 的CI/CD,可以使用的工具有很多,比如 Jenkins.Gitlab CI 以及新兴的 drone 之类的,我们这里会使用大家最为熟悉的 Jenkins 来做 CI/C ...
- Opengl ES之纹理贴图
纹理可以理解为一个二维数组,它可以存储大量的数据,这些数据可以发送到着色器上.一般情况下我们所说的纹理是表示一副2D图,此时纹理存储的数据就是这个图的像素数据. 所谓的纹理贴图,就是使用Opengl将 ...
- MES系统与ERP系统信息集成有哪些原则?
首先,MES和ERP应该是两个独立的系统,简单的说,ERP与MES有点像公司总部与分厂的关系,ERP向MES发指令,MES向ERP做汇报,所以可以按照这个思维来考虑或类比来处理.从企业的管理来说,ER ...
- 自然语言处理NLP程序包(NLTK/spaCy)使用总结
NLTK和SpaCy是NLP的Python应用,提供了一些现成的处理工具和数据接口.下面介绍它们的一些常用功能和特性,便于对NLP研究的组成形式有一个基本的了解. NLTK Natural Langu ...
- 关于csh-C-shell的记录
csh,由柏克莱大学的 Bill Joy 设计的,语法有点类似C语言,所以才得名为 C shell ,简称为 csh Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器 ...