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语言-为什么返回值为接口类型,却返回结构体
Apr 24 Golang
用golang如何替换某个文件中的字符串
Apr 25 Golang
golang如何去除多余空白字符(含制表符)
Apr 25 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
解决golang在import自己的包报错的问题
Apr 29 Golang
Golang: 内建容器的用法
May 05 Golang
完美解决golang go get私有仓库的问题
May 05 Golang
golang中字符串MD5生成方式总结
Jul 04 Golang
Go语言基础切片的创建及初始化示例详解
Nov 17 Golang
Go语言实现一个简单的并发聊天室的项目实战
Mar 18 Golang
GO语言字符串处理函数之处理Strings包
Apr 14 Golang
Golang日志包的使用
Apr 20 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中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
js实现文字闪烁特效的方法
2015/12/17 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
举例介绍Python中的25个隐藏特性
2015/03/30 Python
python中的代码编码格式转换问题
2015/06/10 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Linux下python3.7.0安装教程
2018/07/30 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
Python 实现opencv所使用的图片格式与 base64 转换
2020/01/09 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
python如何实现DES加密
2020/09/21 Python
如何编写python的daemon程序
2021/01/07 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
本科毕业生的求职信范文
2013/11/20 职场文书
大学学习生活感言
2014/01/18 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers