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 28 Golang
golang slice元素去重操作
Apr 30 Golang
goland设置颜色和字体的操作
May 05 Golang
Go标准容器之Ring的使用说明
May 05 Golang
Go 语言下基于Redis分布式锁的实现方式
Jun 28 Golang
go select编译期的优化处理逻辑使用场景分析
Jun 28 Golang
Golang中channel的原理解读(推荐)
Oct 16 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 Golang
GO语言字符串处理函数之处理Strings包
Apr 14 Golang
Golang 字符串的常见操作
Apr 19 Golang
实现GO语言对数组切片去重
Apr 20 Golang
Golang 实现 WebSockets 之创建 WebSockets
Apr 24 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
ASP知识讲座四
2006/10/09 PHP
php学习 函数 课件
2008/06/15 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
python使用pycharm环境调用opencv库
2018/02/11 Python
Python中collections模块的基本使用教程
2018/12/07 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
计算机专业毕业生自荐书
2014/06/02 职场文书
怎样写离婚协议书
2015/01/26 职场文书