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 相关文章推荐
一文读懂go中semaphore(信号量)源码
Apr 03 Golang
Golang二维切片初始化的实现
Apr 08 Golang
golang中切片copy复制和等号复制的区别介绍
Apr 27 Golang
基于Golang 高并发问题的解决方案
May 08 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
Golang生成Excel文档的方法步骤
Jun 09 Golang
修改并编译golang源码的操作步骤
Jul 25 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
Golang bufio详细讲解
Apr 21 Golang
Go微服务项目配置文件的定义和读取示例详解
Jun 21 Golang
Go语言怎么使用变长参数函数
Jul 15 Golang
Go结合Gin导出Mysql数据到Excel表格
Aug 05 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
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
基于JQuery的cookie插件
2010/04/07 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
使用Python编写vim插件的简单示例
2015/04/17 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
Python异常处理例题整理
2019/07/07 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
简历中自我评价分享
2013/10/09 职场文书
大学生毕业自荐信
2013/10/10 职场文书
急诊科护士自我鉴定
2013/10/14 职场文书
高级人员简历的自我评价分享
2013/11/03 职场文书
艺术教育实施方案
2014/05/03 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书