在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Go語言中的包

阿銘linux ? 來源:阿銘linux ? 2023-04-17 09:22 ? 次閱讀

每個 Go 文件都屬于且僅屬于一個包,一個包可以由許多以 .go 為擴展名的源文件組成,因此文件名和包名一般來說都是不相同的。

你必須在源文件中非注釋的第一行指明這個文件屬于哪個包,如:

package main

1、main包

每個Go應(yīng)用程序都包含一個名為main的包,main包下可以有多個文件,但所有文件中只能有一個main() 方法,main()方法代表程序入口。

一個應(yīng)用程序可以包含不同的包,而且即使你只使用main包也不必把所有的代碼都寫在一個文件里:你可以用一些較小的文件,并且在每個文件第一行都使用package main來指明這些文件都屬于main包。

如果你打算編譯包名不是為main的源文件,如pack1,編譯后產(chǎn)生的對象文件將會是pack1.a,而不是可執(zhí)行程序。另外要注意的是,所有的包名都應(yīng)該使用小寫字母。

2、標(biāo)準(zhǔn)庫

Go程序自帶的包合起來成為Go的標(biāo)準(zhǔn)庫,前面我們用過fmt、os、net/http、strconv,除此之外還有如下常見的包:

包名 說明
bufio 帶緩沖的 I/O 操作
bytes 實現(xiàn)字節(jié)操作
container 封裝堆、列表和環(huán)形列表等容器
crypto 加密算法
database 數(shù)據(jù)庫驅(qū)動和接口
debug 各種調(diào)試文件格式訪問及調(diào)試功能
encoding 常見算法如 JSON、XML、Base64 等
flag 命令行解析
html HTML 轉(zhuǎn)義及模板系統(tǒng)
image 常見圖形格式的訪問及生成
io 實現(xiàn) I/O 原始訪問接口及訪問封裝
math 數(shù)學(xué)庫
net 網(wǎng)絡(luò)庫,支持 Socket、HTTP、郵件、RPC、SMTP 等
path 兼容各操作系統(tǒng)的路徑操作實用函數(shù)
plugin 支持將代碼編譯為插件,按需加載
reflect 語言反射支持。可以動態(tài)獲得代碼中的類型信息,獲取和修改變量的值
regexp 正則表達式封裝
runtime 運行時接口
sort 排序接口
strings 字符串轉(zhuǎn)換、解析及實用函數(shù)
time 時間接口
text 文本模板及 Token 詞法器

標(biāo)準(zhǔn)庫里的包,只需要在go程序里import后,就可以調(diào)用了。

3、自定義包

假定我們有兩個包:aming和linux,下面來演示如何在aming包中導(dǎo)入linux包

1)兩個包屬于同一個項目

在這里,“項目”理解成就是一個目錄(aming),在這個目錄下還有一個子目錄(linux),這個linux也就是要被導(dǎo)入的包

目錄結(jié)構(gòu)為:

aming/
├── linux
│   └── linux.go
└── aming.go

先來定義linux包程序

mkdir -p aming/linux
cdaming/linux
cat > linux.go << EOF
package linux
//定義變量,變量名頭字母大寫,可以在外部調(diào)用
var Name = "linux"
//函數(shù)名 頭字母大寫,表示該函數(shù)可以被其它程序調(diào)用
func Sum(n1, n2 int) int {
        return n1 + n2
}
func Sub(n1, n2 int) int {
        return n1 - n2
}
func Mul(n1, n2 int) int {
        return n1 * n2
}
func Div(n1, n2 int) int {
        return n1 / n2
}
EOF

初始化module

cd ..
go mod init  aming  ##包的名字為aming

調(diào)用linux包

cat > aming.go << EOF
package main


import (
  "fmt"
  "aming/linux"
)


func main() {
    total := linux.Sum(3, 5)
    fmt.Println("3和5相加等于", total)
    fmt.Println("10除以2等于", linux.Div(10, 2))
    fmt.Println("Name is:", linux.Name)
}
EOF

編譯

go build

會在當(dāng)前目錄里生成可執(zhí)行文件aming

執(zhí)行

efd058aa-dcbb-11ed-bfe3-dac502259ad0.png

2)兩個包為兩個項目

目錄結(jié)構(gòu)為:

├── aming
│   └── aming.go
└── linux
    └── linux.go

先來定義linux包程序

mkdir -p aming linux
cat > linux/linux.go << EOF
package linux
//定義變量,變量名頭字母大寫,可以在外部調(diào)用
var Name = "linux"
//函數(shù)名 頭字母大寫,表示該函數(shù)可以被其它程序調(diào)用
func Sum(n1, n2 int) int {
        return n1 + n2
}
func Sub(n1, n2 int) int {
        return n1 - n2
}
func Mul(n1, n2 int) int {
        return n1 * n2
}
func Div(n1, n2 int) int {
        return n1 / n2
}
EOF

定義主程序

cat > aming.go << EOF
package main


import?(
  "fmt"
  "linux"
)


func main() {
    total := linux.Sum(3, 5)
    fmt.Println("3和5相加等于", total)
    fmt.Println("10除以2等于", linux.Div(10, 2))
    fmt.Println("Name is:", linux.Name)
}
EOF

此時運行程序會報錯

go run aming.go
aming.go:5:3: package linux is not in GOROOT (/opt/go/src/linux)

它會默認(rèn)到$GOROOT下去找linux包,要解決此問題,可以將linux目錄直接挪到$GOROOT下

mv ../linux /opt/go/src/

再次執(zhí)行程序,正常

go run aming/aming.go
3和5相加等于8
10除以2等于5
Name is: linux

如果不想將linux目錄挪到$GOROOT下,還有一種方法,定義go.mod即可,主要目的是為了讓aming.go找到linux包

先把linux目錄挪回來(注意,當(dāng)前還是在aming目錄里)

mv /opt/go/src/linux  ../

初始化module

go mod init aming

到linux目錄下,也要初始化module

cd linux
go mod init linux

然后編輯aming目錄下的go.mod,改為

module aming


go1.20
require"linux"v0.0.0
replace "linux" => "../linux"

說明:require定義要依賴的包,replace定義該包在什么位置。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11577
  • HTML
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

    36531
  • SMTP協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6617
  • go語言
    +關(guān)注

    關(guān)注

    1

    文章

    158

    瀏覽量

    9089

原文標(biāo)題:Go語言中的包

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Go語言變量的命名和聲明

    變量名 必須以一個 字母或下劃線開頭 ,后面可以跟任意數(shù)量的字母、數(shù)字或下劃線,在 Go 語言中,變量名區(qū)分大小寫字母。當(dāng)然,上述的命名規(guī)則在命名 函數(shù)名 、 常量名 、 類型名 、 語句標(biāo)號 和 名 等都適用。
    發(fā)表于 07-19 18:23 ?723次閱讀

    Go語言常量的聲明

    Go 語言中, 常量 表示的是固定的值,常量表達式的值在編譯期進行計算,常量的值不可以修改。例如:3 、 Let's go 、 3.14 等等。常量中的數(shù)據(jù)類型只可以是 布爾型 、 數(shù)字型 (整數(shù)型、浮點型和復(fù)數(shù))
    發(fā)表于 07-20 15:24 ?438次閱讀

    Go語言中的整數(shù)類型

    Go 語言中,整型可以細分成兩個種類十個類型。
    發(fā)表于 07-20 15:25 ?965次閱讀

    【MYS-6ULX-IOT試用體驗】Go語言與GPIO: 1 控制用戶LED

    ("0")time.Sleep(time.Millisecond * 500)} }()這里實現(xiàn)了LED的閃爍 go func() { }()在Go語言中,每一個并發(fā)的執(zhí)行單元叫作一個
    發(fā)表于 06-20 09:40

    Go語言開發(fā)有什么優(yōu)勢?怎么學(xué)?

      目前很多IT界的朋友們開始了學(xué)習(xí)Go這個語言,作為最近幾年比較火的服務(wù)端開發(fā)語言,其開發(fā)效率高的特性,使得它迅速的占領(lǐng)了各大公司的服務(wù)端開發(fā)領(lǐng)域。相比其他服務(wù)端開發(fā)語言
    發(fā)表于 12-19 16:08

    go語言能做什么工作?

    :網(wǎng)絡(luò)流量抓和重放工具Go語言作為一門大型項目開發(fā)語言,在很多大公司相繼使用,甚至完全轉(zhuǎn)向Go開發(fā),其中代表有Google、Faceboo
    發(fā)表于 03-22 15:03

    Go開發(fā)語言的優(yōu)勢在哪里?

    Go語言是谷歌發(fā)布的第二款開源編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性,并專門針對多處理器系統(tǒng)應(yīng)用程序的編程進行了優(yōu)化,開發(fā)速度極快,可以與C或C++媲美,而且更加安全、支持并行
    發(fā)表于 03-22 15:04

    C語言中的關(guān)鍵字

    C語言中的入門教程
    發(fā)表于 10-14 16:24 ?3次下載

    網(wǎng)易有道CEO周楓推薦Go語言并介紹Go語言的3個優(yōu)點

    網(wǎng)易有道CEO周楓推薦Go語言。他認(rèn)為Go很好地繼承了C語言靈活、簡單有效的思想;Go有很高的生產(chǎn)效率;
    的頭像 發(fā)表于 01-31 14:11 ?5242次閱讀

    詳解GO語言的趨勢與使用情況

    Go 語言簡單易學(xué)、性能優(yōu)良。JetBrains Blog 發(fā)布了Go 語言的調(diào)查報告,看看GO 語言
    的頭像 發(fā)表于 03-17 11:05 ?3084次閱讀

    go語言枚舉類型怎么用

    go 語言枚舉類型是這么用的?在什么場景下會用到枚舉?本文對 go 語言枚舉做了詳細講解。 枚舉,是一種重要的數(shù)據(jù)類型,由一組鍵值對組成,通常用來在編程
    的頭像 發(fā)表于 09-02 09:43 ?5233次閱讀

    詳細介紹go語言中的閉的實現(xiàn)

    什么是閉? 什么場景下會用閉 ? 本文對 go 語言中的閉做了詳細介紹。 閉是由函數(shù)及其
    的頭像 發(fā)表于 10-20 16:18 ?1890次閱讀

    Go語言sync中的鎖都在什么場景下用

    Go 語言 sync 中的鎖都在什么場景下用?怎么用?本文對 sync 內(nèi)的鎖做了梳理。 今天談一下鎖,以及 Go 里面 Sync
    的頭像 發(fā)表于 10-26 09:35 ?2241次閱讀

    帶你了解go語言中的閉

    ? 【 導(dǎo)讀】什么是閉? 什么場景下會用閉 ? 本文對 go 語言中的閉做了詳細介紹。 閉
    的頭像 發(fā)表于 11-02 15:27 ?2497次閱讀

    go語言中怎么使用HTTP代理

    go語言中怎么使用HTTP代理。
    的頭像 發(fā)表于 09-01 14:41 ?2466次閱讀
    主站蜘蛛池模板: 性在线视频 | 可以免费播放的在线视频 | 射在老师的里面真爽 | 天天涩综合| 老师你好滑下面好湿h | 777奇米影音 | 2019天天干天天操 | 亚洲成成品网站有线 | 黄视频网站免费看 | 五月深爱婷婷 | 天天爱夜夜爱 | 性欧美一区| 日本写真高清视频免费网站网 | 91精品久久国产青草 | 五月婷婷俺也去开心 | www.亚洲色图.com| 亚洲视频第一页 | 丁香六月色婷婷综合网 | 第四色亚洲 | 欧美最猛黑人xxxx黑人猛交黄 | 国产一级在线观看 | va在线观看 | 日韩欧美一级 | 午夜在线观看免费视频 | 国产亚洲综合一区 柠檬导航 | 午夜久久久久久 | 日韩 ed2k| 性欧美日韩 | 欧美色淫 | 欧美性生交xxxxx久久久 | 国产精品国产三级国产在线观看 | 视频在线观看网站免费 | 欧美成人一区二区三区在线电影 | 国产婷婷综合在线精品尤物 | 人人爱天天做夜夜爽 | 69日本人xxxxxxxx18 | 狠狠色噜噜狠狠狠狠98 | 一区二区三 | 国产精品久久久久久免费播放 | 一卡二卡三卡四卡无卡在线 | 在线色国产 |