golang import自定义包方式


Posted in Golang onApril 29, 2021

1.初探

刚开始接触go时,以为import自定义包与Java工程类似,在非GOPATH的路径中新建了一个go项目HelloGo,如下:

golang import自定义包方式

接下来,利用beego的bee工具新建了另一个项目helloapi,如下:

golang import自定义包方式

现在,想在helloapi项目中调用HelloGo项目的函数,通过import引入“HelloGo”,编辑器中一直提示无法引用,即使把HelloGo添加到左下角的GOPATH[helloapi]中,也没有效果。

具体如下:

golang import自定义包方式

问题出在HelloGo项目的路径上,因为其不在系统定义的GOPATH路径下,查看下系统定义的GOPATH:

localhost:helloapi loongshawn$ echo $GOPATH
/Users/loongshawn/Documents/go/workspace
localhost:helloapi loongshawn$

因此,要想引入自定义的包,需要自定义包的路径为GOPATH路径中。

2.操作

在工程A中创建方法Say,如下代码:

package routers
import (
    "fmt"
)

func Say() {
    fmt.Println("引用helloweb项目的Say方法")
}

在工程B中引入工程A,并调用A工程中的Say函数,同时启动工程A,Console输出结果如下:

golang import自定义包方式

golang import自定义包方式

输出结果显示,调用Say函数正常。不知大家注意到被调用函数Say的写法没有,函数名首字母是大写的,如果把其换成小写行不行?

在A工程的router.go中新增了print函数,试一下:

func print() {
    fmt.Println("引用helloweb项目的print方法")
}

golang import自定义包方式

B工程中重新引用A工程的print方法,但是引用不了。因此,在写可调用方法时,方法名首字母需要大写,这是需要注意的一点。

golang import自定义包方式

由于接触Go不久,许多地方理解不一定到位,如有纰漏之处,请各位同学帮忙指出来,谢谢!

补充:GoLang 自定义包总结

大概总结一下 GoLang 自定义包,并不是需要发布的包,只是一次在代码工作路径下调用自定义包的一个尝试。

今天踩坑就是,以为 import 的时候要填写文件夹里面的 package 的名称,比如之前我是这么写的:

import "./pack/p"

这样无法通过编译,这就是本文的由来了

首先,工作的目录结构是这样的:

.
├── main.go
└── pack
    └── test.go

1 directory, 2 files

其中,各个文件代码为:

// main.go
package main
import (
        "fmt"
       "./pack"
)
func main() {
        s := p.Sayhello()
        fmt.Println(s)
}
// pack/test.go
package p
func Sayhello() string {
        return "Hello!"
}

在主目录下通过 go run 或者 go build 的方法运行或编译,都是可以通过的。

证明了以下几点:

import 语句使用的是文件夹的名称

上面的文件夹名字为 pack

文件夹名称和 package 名称不一定一样

比如 pack 和 p

调用自定义包使用 package.函数名 的方式

p.xxx

自定义包的调用和文件名没有关系。

test.go 和 p 没有关系

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
Golang二维切片初始化的实现
Apr 08 Golang
go语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
golang 生成对应的数据表struct定义操作
Apr 28 Golang
golang DNS服务器的简单实现操作
Apr 30 Golang
Go语言 go程释放操作(退出/销毁)
Apr 30 Golang
解决go在函数退出后子协程的退出问题
Apr 30 Golang
Golang 实现获取当前函数名称和文件行号等操作
May 08 Golang
Go timer如何调度
Jun 09 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
golang 语言中错误处理机制
Aug 30 Golang
深入理解go缓存库freecache的使用
Feb 15 Golang
浅谈GO中的Channel以及死锁的造成
Mar 18 Golang
golang 接口嵌套实现复用的操作
Apr 29 #Golang
浅谈Golang 嵌套 interface 的赋值问题
Apr 29 #Golang
Go 实现英尺和米的简单单位换算方式
Apr 29 #Golang
Golang 空map和未初始化map的注意事项说明
彻底理解golang中什么是nil
基于Go Int转string几种方式性能测试
Apr 28 #Golang
Go语言中break label与goto label的区别
You might like
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
javascript页面加载完执行事件代码
2014/02/11 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
浅析Python 中整型对象存储的位置
2016/05/16 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
python实现linux下抓包并存库功能
2018/07/18 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
python实现函数极小值
2019/07/10 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
Python urllib.request对象案例解析
2020/05/11 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
体育教育毕业生自荐信
2013/11/21 职场文书
打架检讨书800字
2014/01/10 职场文书
小学科学教学反思
2014/01/26 职场文书
经济国贸专业求职信
2014/06/18 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
庆元旦主持词
2015/07/06 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
导游词之广西漓江
2019/11/02 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
MySQL如何解决幻读问题
2021/08/07 MySQL
mysql幻读详解实例以及解决办法
2022/06/16 MySQL