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)
以上代碼的問題:
- 需求變更,取模,代碼不夠靈活
- 不利于維護(hù)
- 代碼冗余
函數(shù)可以解決這個(gè)問題
- 封裝
- 傳參調(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ù)的問題
一個(gè)文件里出現(xiàn)超級(jí)多的函數(shù)
utils.go
文件,專門用于定義函數(shù),讓其它文件來調(diào)用,工具函數(shù)的封裝,
db.go
文件,專門定義對(duì)數(shù)據(jù)庫(kù)操作的函數(shù)
main.go
文件,引入其它文件,使用工具函數(shù), 代碼更專注
繼而引出包的概念,分門別類的使用,也有利于多人協(xié)同開發(fā),相同的函數(shù)名可以存在不同的包下面
包的原理介紹
包的本質(zhì),實(shí)際上就是創(chuàng)建不同的文件夾,來存放程序文件。
go的每一個(gè)文件都屬于一個(gè)包的,也就是說go以包的形式來管理文件和項(xiàng)目目錄結(jié)構(gòu)的。
大寫字母開頭的標(biāo)識(shí)符,表示該標(biāo)識(shí)符可導(dǎo)出
作用:
- 區(qū)分相同名字的函數(shù)、變量等標(biāo)識(shí)符
- 當(dāng)程序文件很多時(shí),很好的管理項(xiàng)目
- 控制函數(shù)、變量的訪問范圍,即作用域
語(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ǔ)言實(shí)現(xiàn)跨域資源共享(CORS)設(shè)置
在Web開發(fā)中,跨域資源共享(CORS)是一種重要的安全機(jī)制,它允許許多資源在一個(gè)網(wǎng)頁(yè)上被另一個(gè)來源的網(wǎng)頁(yè)所訪問,然而,出于安全考慮,瀏覽器默認(rèn)禁止這種跨域訪問,為了解決這個(gè)問題,我們可以使用Go語(yǔ)言來設(shè)置CORS,需要的朋友可以參考下2024-06-06使用Golang實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲與分析
在網(wǎng)絡(luò)通信中,網(wǎng)絡(luò)數(shù)據(jù)包是信息傳遞的基本單位,抓包是一種監(jiān)控和分析網(wǎng)絡(luò)流量的方法,用于獲取網(wǎng)絡(luò)數(shù)據(jù)包并對(duì)其進(jìn)行分析,本文將介紹如何使用Golang實(shí)現(xiàn)抓包功能,包括網(wǎng)絡(luò)數(shù)據(jù)包捕獲和數(shù)據(jù)包分析,需要的朋友可以參考下2023-11-11Go語(yǔ)言切片前或中間插入項(xiàng)與內(nèi)置copy()函數(shù)詳解
這篇文章主要介紹了Go語(yǔ)言切片前或中間插入項(xiàng)與內(nèi)置copy()函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04通過源碼分析Golang?cron的實(shí)現(xiàn)原理
golang實(shí)現(xiàn)定時(shí)任務(wù)很簡(jiǎn)單,只須要簡(jiǎn)單幾步代碼即可以完成,最近在做了幾個(gè)定時(shí)任務(wù),想研究一下它內(nèi)部是怎么實(shí)現(xiàn)的,所以將源碼過了一遍,記錄和分享在此。需要的朋友可以參考以下內(nèi)容,希望對(duì)大家有幫助2022-10-10Golang基于JWT與Casbin身份驗(yàn)證授權(quán)實(shí)例詳解
這篇文章主要為大家介紹了Golang基于JWT與Casbin實(shí)現(xiàn)身份驗(yàn)證授權(quán)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08