首页 > 其他分享 >Go | 函数(包)的使用

Go | 函数(包)的使用

时间:2022-11-07 20:24:22浏览次数:74  
标签:函数 float64 res var go 使用 Go n1 n2

实现加减乘除运算

传统方法实现:

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

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

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

本文由mdnice多平台发布

标签:函数,float64,res,var,go,使用,Go,n1,n2
From: https://www.cnblogs.com/all-smile/p/16867293.html

相关文章

  • 函数提高
    3函数提高3.1函数默认参数在C++中,函数的形参列表中的形参是可以有默认值的。语法:返回值类型函数名(参数=默认值){}示例:intfunc(inta,intb=10,intc=10)......
  • Go_day01
    Go基础语法注释注释是为了增强代码的可读性,不会参与程序的一切功能,go语言注释分为单行注释与多行注释单行注释//双斜杠每行都要添加//多行注释/**/一次标记......
  • Springboot中使用GSON报错 An attempt was made to call the method com.google.gso
    错误如下: Description:Anattemptwasmadetocallthemethodcom.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder;butitdoesnotexist.Itscl......
  • A simple usage of "Gobuster"
    Atoolfor enumeratingallwebpageofawebsite.=====> https://github.com/OJ/gobusterItrequeiresawordlisttomatchthenamesofthepagesinaparticu......
  • win驱动中使用IRP注意项及原因分析(后续补充)
    MS上有很多关于驱动中使用IRP的守则(跟黄历中的宜忌差不多了),比如:Q1.“DriversmustnotattempttoreuseIRPsissuedbytheI/Omanager.Inparticular,driversshou......
  • DLL的入口点函数
    一、基本介绍系统在不同的时候调用这个入口点函数,这些调用是通知性质的,用来执行一些与进程或者线程有关的清理工作。如果DLL需要这些通知,则需要在源代码中实现这个入口点......
  • sql sever中使用go时遇到go附近有语法问题的情况
    今天在验证所学的数据库知识时遇到了下图中的问题代码最开始是直接从ppt上copy过来的,以为是全角半角字符的问题,但手输了几遍还是报错,我试着在几位同学电脑上运行了相......
  • JAVA回调函数简单讲解 CallBack
    回调,其实就是有个回应的那种感觉。那么,接下来,我们就用消息推送的场景,简简单单地讲解下回调函数的使用。直接看代码,先创建一个回调接口,MessageCallBack/***@Author:JCccc......
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
    (建议初学者把这个系列前面的都看看,那对于redis的基本使用操作及一些消息的订阅分布都是没问题的了)Redis,一个缓存数据库。不仅仅是能用于对数据的CRUD,也可以作为一个消息中间......
  • 07-Go语言Map和String
    Map初始化 varmap1map[int]string varmap2=make(map[int]string) varmap3=map[int]string{1:"倒霉",2:"打针"} fmt.Println(map1) fmt.Println(map2==n......