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 Gin实现文件上传下载的示例代码
Apr 02 Golang
go:垃圾回收GC触发条件详解
Apr 24 Golang
go语言求任意类型切片的长度操作
Apr 26 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 Golang
Go 自定义package包设置与导入操作
May 06 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
golang 语言中错误处理机制
Aug 30 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 Golang
实现GO语言对数组切片去重
Apr 20 Golang
Golang jwt身份认证
Apr 20 Golang
Golang并发工具Singleflight
May 06 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
php模板之Phpbean的目录结构
2008/01/10 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
为Python的web框架编写前端模版的教程
2015/04/30 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
Python中extend和append的区别讲解
2019/01/24 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
新三好学生主要事迹
2014/01/23 职场文书
早会主持词
2014/03/17 职场文书
保研推荐信
2014/05/09 职场文书
医院节能减排方案
2014/06/13 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
辞职信怎么写
2015/02/27 职场文书
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技