Go語(yǔ)言基礎(chǔ)函數(shù)包的使用學(xué)習(xí)
實(shí)現(xiàn)加減乘除運(yùn)算
傳統(tǒng)方法實(shí)現(xiàn):
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("不合法的運(yùn)算符")
}
fmt.Printf("res=%v", res)以上代碼的問(wèn)題:
- 需求變更,取模,代碼不夠靈活
- 不利于維護(hù)
- 代碼冗余
函數(shù)可以解決這個(gè)問(wèn)題
- 封裝
- 傳參調(diào)用
- 返回值
函數(shù)基本語(yǔ)法
func 函數(shù)名 (形參列表) (返回值列表) {
執(zhí)行語(yǔ)句
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("不合法的運(yùn)算符")
}
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)
}函數(shù)的問(wèn)題
一個(gè)文件里出現(xiàn)超級(jí)多的函數(shù)
utils.go 文件,專門用于定義函數(shù),讓其它文件來(lái)調(diào)用,工具函數(shù)的封裝,
db.go 文件,專門定義對(duì)數(shù)據(jù)庫(kù)操作的函數(shù)
main.go 文件,引入其它文件,使用工具函數(shù), 代碼更專注
繼而引出包的概念,分門別類的使用,也有利于多人協(xié)同開發(fā),相同的函數(shù)名可以存在不同的包下面
包的原理介紹
包的本質(zhì),實(shí)際上就是創(chuàng)建不同的文件夾,來(lái)存放程序文件。
go的每一個(gè)文件都屬于一個(gè)包的,也就是說(shuō)go以包的形式來(lái)管理文件和項(xiàng)目目錄結(jié)構(gòu)的。
大寫字母開頭的標(biāo)識(shí)符,表示該標(biāo)識(shí)符可導(dǎo)出
作用:
- 區(qū)分相同名字的函數(shù)、變量等標(biāo)識(shí)符
- 當(dāng)程序文件很多時(shí),很好的管理項(xiàng)目
- 控制函數(shù)、變量的訪問(wèn)范圍,即作用域
語(yǔ)法
package util
引入使用(封裝實(shí)現(xiàn)加減乘除的工具函數(shù))
包名.函數(shù)名
省略 GOPATH/src 或 GOROOT/src,前提是在 env.GO111MODULE=off 的情況下
import "包的路徑" // GOPATH or GOROOT src, env.GO111MODULE=off
utils/utils.go 文件
package utils
import "fmt"
// 標(biāo)識(shí)符大寫,表示可導(dǎo)出
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("不合法的運(yùn)算符")
}
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 默認(rèn)寬度,精度2
// float64 3.34包的注意事項(xiàng)
包名建議跟目錄名保持一致,也可以不一致
import "包名"
這個(gè)包名,就是 package "包名" 定義的包名,跟目錄名字沒有關(guān)系,倘若 package 定義的名字跟目錄名不一致,引入包的時(shí)候,要以package定義的包名為準(zhǔn)。
- package "包名" 必須在文件的第一行,然后再 import
- 引包路徑, GOPATH or GOROOT src目錄下,
env.GO111MODULE - 包里面要暴露的函數(shù),函數(shù)名必須大寫,表示可導(dǎo)出
- 如果包名比較長(zhǎng),go支持取別名,定義別名之后,原先的包名就不好使了
- 在同一個(gè)包下,不允許有相同的函數(shù)名
- 如果要編譯成一個(gè)可執(zhí)行程序文件,就需要將這個(gè)包聲明為 main
進(jìn)入項(xiàng)目根目錄(go build的執(zhí)行環(huán)境就是運(yùn)行命令的目錄),
go build go_code/fndemo1/main , 在根目錄會(huì)生成main.exe可執(zhí)行文件
go build -o bin/my.exe go_code/fndemo1/main, -o表示輸出的目錄,沒有則會(huì)自動(dòng)創(chuàng)建
import (
"fmt"
util "go_code/fndemo1/utils"
)
// 使用
util.Calc()以上就是Go語(yǔ)言基礎(chǔ)函數(shù)包的使用學(xué)習(xí)的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言函數(shù)包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語(yǔ)言panic和recover的用法實(shí)例
panic()和recover()是Go語(yǔ)言中用于處理錯(cuò)誤的兩個(gè)重要函數(shù),本文主要介紹了Go語(yǔ)言panic和recover的用法實(shí)例,panic()用于中止程序并引發(fā)panic,而recover()用于捕獲panic并恢復(fù)程序的執(zhí)行,感興趣的可以了解一下2024-01-01
go mayfly開源項(xiàng)目代碼結(jié)構(gòu)設(shè)計(jì)
這篇文章主要為大家介紹了go mayfly開源項(xiàng)目代碼結(jié)構(gòu)設(shè)計(jì)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Go語(yǔ)言題解LeetCode1260二維網(wǎng)格遷移示例詳解
這篇文章主要為大家介紹了Go語(yǔ)言題解LeetCode1260二維網(wǎng)格遷移示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
GO中cannot find module的錯(cuò)誤解決
本文主要介紹了GO中cannot find module的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-09-09
Go語(yǔ)言中?Print?Printf和Println?的區(qū)別解析
這篇文章主要介紹了Go語(yǔ)言中?Print?Printf和Println?的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
Go設(shè)計(jì)模式之訪問(wèn)者模式講解和代碼示例
訪問(wèn)者是一種行為設(shè)計(jì)模式, 允許你在不修改已有代碼的情況下向已有類層次結(jié)構(gòu)中增加新的行為,本文將通過(guò)代碼示例給大家詳細(xì)的介紹一下Go設(shè)計(jì)模式之訪問(wèn)者模式,需要的朋友可以參考下2023-08-08
golang如何部署到服務(wù)器及應(yīng)注意問(wèn)題解析
這篇文章主要為大家介紹了golang如何部署到服務(wù)器及應(yīng)注意問(wèn)題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

