色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Go語言中的包

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

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

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

package main

1、main包

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

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

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

2、標準庫

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

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

標準庫里的包,只需要在go程序里import后,就可以調用了。

3、自定義包

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

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

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

目錄結構為:

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

先來定義linux包程序

mkdir -p aming/linux
cdaming/linux
cat > linux.go << EOF
package linux
//定義變量,變量名頭字母大寫,可以在外部調用
var Name = "linux"
//函數名 頭字母大寫,表示該函數可以被其它程序調用
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

調用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

會在當前目錄里生成可執行文件aming

執行

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

2)兩個包為兩個項目

目錄結構為:

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

先來定義linux包程序

mkdir -p aming linux
cat > linux/linux.go << EOF
package linux
//定義變量,變量名頭字母大寫,可以在外部調用
var Name = "linux"
//函數名 頭字母大寫,表示該函數可以被其它程序調用
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)

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

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

再次執行程序,正常

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

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

先把linux目錄挪回來(注意,當前還是在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定義該包在什么位置。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RPC
    RPC
    +關注

    關注

    0

    文章

    111

    瀏覽量

    11540
  • HTML
    +關注

    關注

    0

    文章

    278

    瀏覽量

    35783
  • SMTP協議
    +關注

    關注

    0

    文章

    7

    瀏覽量

    6611
  • go語言
    +關注

    關注

    1

    文章

    158

    瀏覽量

    9053

原文標題:Go語言中的包

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

收藏 人收藏

    評論

    相關推薦

    Go語言變量的命名和聲明

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

    Go語言常量的聲明

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

    Go語言中的整數類型

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

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

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

    Go語言開發有什么優勢?怎么學?

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

    go語言能做什么工作?

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

    Go開發語言的優勢在哪里?

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

    C語言中的關鍵字

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

    網易有道CEO周楓推薦Go語言并介紹Go語言的3個優點

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

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

    Go 語言簡單易學、性能優良。JetBrains Blog 發布了Go 語言的調查報告,看看GO 語言
    的頭像 發表于 03-17 11:05 ?3057次閱讀

    go語言枚舉類型怎么用

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

    詳細介紹go語言中的閉的實現

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

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

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

    帶你了解go語言中的閉

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

    go語言中怎么使用HTTP代理

    go語言中怎么使用HTTP代理。
    的頭像 發表于 09-01 14:41 ?2430次閱讀
    主站蜘蛛池模板: ASIAN大陆明星裸休合成PICS| 国产看黄网站又黄又爽又色| 久久re视频这里精品09首页| 永久免费看mv网站入口| 九九久久精品国产| 99国产在线精品视频| 色色色999| 精品视频在线观看视频免费视频| 自拍区偷拍亚洲视频| 日本动漫henta videos| 国产精品色无码AV在线观看| 又黄又湿免费高清视频| 人人舔人人爱| 精品人妻无码一区二区三区蜜桃臀 | 天天槽任我槽免费| 精品国产成人系列| 99热久这里都是精品小草| 双性人皇上被c到哭| 久久久免费观成人影院| 大学生高潮无套内谢视频| 亚洲视频欧美视频| 日本吃孕妇奶水免费观看| 精品视频一区二区三三区四区| PORN白嫩内射合集| 亚洲精品久久国产高清| 琪琪电影午夜理论片77网| 好男人好资源在线播放| 边摸边吃奶边做带声音| 妖精视频一区二区免费| 青柠高清在线观看完整版| 久久99精品国产免费观看| 超碰免费视频公开97| 一级毛片直接看| 天天摸夜添狠狠添高| 女仆翻身大作战| 久久99国产精品一区二区| 芳草地社区在线视频| 34g污奶绵uk甩奶| 亚洲色婷婷久久精品AV蜜桃| 三叶草成人| 欧美猛男gaygayxxgv|