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
golang正则之命名分组方式
Apr 25 Golang
Go语言带缓冲的通道实现
Apr 26 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
go语言中fallthrough的用法说明
May 06 Golang
go xorm框架的使用
May 22 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
Golang 1.18 多模块Multi-Module工作区模式的新特性
Apr 11 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
Golang 链表的学习和使用
Apr 19 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
在ubuntu下安装go开发环境的全过程
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
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
[02:04]2014DOTA2国际邀请赛 BBC小组赛第三天总结
2014/07/12 DOTA
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
Python3数字求和的实例
2019/02/19 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
Django在Model保存前记录日志实例
2020/05/14 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
护士辞职信范文
2014/01/19 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
文体活动总结范文
2014/05/05 职场文书
预备党员公开承诺书
2014/05/28 职场文书
十佳少年事迹材料
2014/12/25 职场文书
工作失误检讨书范文
2015/01/26 职场文书
辞职信怎么写
2015/02/27 职场文书
单身证明范本
2015/06/15 职场文书
安全教育主题班会总结
2015/08/14 职场文书