Go | 函數(shù)(包)的使用

本文通過一個實現(xiàn)加減乘除運算的小程序來介紹go函數(shù)的使用诈唬,以及使用函數(shù)的注意事項,并引出了對包的了解和使用怎诫。

實現(xiàn)加減乘除運算

傳統(tǒng)方法實現(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("不合法的運算符")
}
fmt.Printf("res=%v", res)

以上代碼的問題:

  • 需求變更虐唠,取模,代碼不夠靈活

  • 不利于維護

  • 代碼冗余

函數(shù)可以解決這個問題

  • 封裝

  • 傳參調用

  • 返回值

函數(shù)基本語法

func 函數(shù)名 (形參列表) (返回值列表) {

執(zhí)行語句

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)
}

函數(shù)的問題

一個文件里出現(xiàn)超級多的函數(shù)

utils.go 文件少态,專門用于定義函數(shù)城侧,讓其它文件來調用,工具函數(shù)的封裝彼妻,

db.go 文件嫌佑,專門定義對數(shù)據(jù)庫操作的函數(shù)

main.go 文件,引入其它文件侨歉,使用工具函數(shù)屋摇, 代碼更專注

繼而引出包的概念,分門別類的使用幽邓,也有利于多人協(xié)同開發(fā)炮温,相同的函數(shù)名可以存在不同的包下面

包的原理

包的本質,實際上就是創(chuàng)建不同的文件夾牵舵,來存放程序文件茅特。

包的介紹

go的每一個文件都屬于一個包的,也就是說go以包的形式來管理文件和項目目錄結構的棋枕。

大寫字母開頭的標識符白修,表示該標識符可導出

作用:

  • 區(qū)分相同名字的函數(shù)、變量等標識符

  • 當程序文件很多時重斑,很好的管理項目

  • 控制函數(shù)兵睛、變量的訪問范圍,即作用域

語法

package util

引入使用(封裝實現(xiàn)加減乘除的工具函數(shù))

包名.函數(shù)名

省略 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. 包里面要暴露的函數(shù)激涤,函數(shù)名必須大寫拟糕,表示可導出

  5. 如果包名比較長,go支持取別名倦踢,定義別名之后送滞,原先的包名就不好使了

  6. 在同一個包下,不允許有相同的函數(shù)名

  7. 如果要編譯成一個可執(zhí)行程序文件辱挥,就需要將這個包聲明為 main

進入項目根目錄(go build的執(zhí)行環(huán)境就是運行命令的目錄)犁嗅,

go build go_code/fndemo1/main , 在根目錄會生成main.exe可執(zhí)行文件

go build -o bin/my.exe go_code/fndemo1/main-o表示輸出的目錄般贼,沒有則會自動創(chuàng)建

import (
    "fmt"
    util "go_code/fndemo1/utils"
)
// 使用
util.Calc()

我是 甜點cc

熱愛前端開發(fā)愧哟,也喜歡專研各種跟本職工作關系不大的技術,技術哼蛆、產品興趣廣泛且濃厚蕊梧。本號主要致力于分享個人經驗總結,希望可以給一小部分人一些微小幫助腮介。

希望能和大家一起努力營造一個良好的學習氛圍肥矢,為了個人和家庭、為了我國的互聯(lián)網物聯(lián)網技術叠洗、數(shù)字化轉型甘改、數(shù)字經濟發(fā)展做一點點貢獻。數(shù)風流人物還看中國灭抑、看今朝十艾、看你我。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末腾节,一起剝皮案震驚了整個濱河市忘嫉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌案腺,老刑警劉巖庆冕,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異劈榨,居然都是意外死亡访递,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門同辣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拷姿,“玉大人惭载,你說我怎么就攤上這事〉埃” “怎么了棕兼?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵陡舅,是天一觀的道長抵乓。 經常有香客問我,道長靶衍,這世上最難降的妖魔是什么灾炭? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮颅眶,結果婚禮上蜈出,老公的妹妹穿的比我還像新娘。我一直安慰自己涛酗,他們只是感情好铡原,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著商叹,像睡著了一般燕刻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剖笙,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天卵洗,我揣著相機與錄音,去河邊找鬼弥咪。 笑死过蹂,一個胖子當著我的面吹牛,可吹牛的內容都是我干的聚至。 我是一名探鬼主播酷勺,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扳躬!你這毒婦竟也來了脆诉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤坦报,失蹤者是張志新(化名)和其女友劉穎库说,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體片择,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡潜的,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了字管。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啰挪。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡信不,死狀恐怖,靈堂內的尸體忽然破棺而出亡呵,到底是詐尸還是另有隱情抽活,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布锰什,位于F島的核電站下硕,受9級特大地震影響,放射性物質發(fā)生泄漏汁胆。R本人自食惡果不足惜梭姓,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫩码。 院中可真熱鬧誉尖,春花似錦、人聲如沸铸题。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丢间。三九已至探熔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間千劈,已是汗流浹背祭刚。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留墙牌,地道東北人涡驮。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像喜滨,于是被迫代替她去往敵國和親捉捅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容