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语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 Golang
golang DNS服务器的简单实现操作
Apr 30 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
golang实现一个简单的websocket聊天室功能
Oct 05 Golang
Go语言特点及基本数据类型使用详解
Mar 21 Golang
victoriaMetrics库布隆过滤器初始化及使用详解
Apr 05 Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Apr 10 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 Golang
Go中使用gjson来操作JSON数据的实现
Aug 14 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建立Ftp连接的方法
2015/03/07 PHP
php微信公众平台开发类实例
2015/04/01 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
js 方法实现返回多个数据的代码
2009/04/30 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
儿童python练习实例
2018/05/27 Python
详解python中的hashlib模块的使用
2019/04/22 Python
简单了解python代码优化小技巧
2019/07/08 Python
django配置app中的静态文件步骤
2020/03/27 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
医科学校毕业生自荐信
2013/11/09 职场文书
幼教简历自我评价
2014/01/28 职场文书
大学班级学风建设方案
2014/05/01 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
工作推荐信模板
2015/03/25 职场文书
护士求职自荐信
2015/03/25 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS