广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Go36-3-代码包
  • 164
分享到

Go36-3-代码包

代码 2023-01-31 00:01:42 164人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

如果代码太复杂,就可以把代码写在多个源码文件里。或者是其他代码包中(这个后面讲) 代码示例 下面是程序的主体,但是其中调用了square()函数,这个函数并没有声明: // Go36/article03/example01/demo.

如果代码太复杂,就可以把代码写在多个源码文件里。或者是其他代码包中(这个后面讲)

代码示例

下面是程序的主体,但是其中调用了square()函数,这个函数并没有声明:

// Go36/article03/example01/demo.go
package main

import (
    "flag"
    "fmt"
)

var x int

func init() {
    flag.IntVar(&x, "x", 0, "计算平方")
}

func main() {
    flag.Parse()
    res := square(x)
    fmt.Println(x, "的平方:", res)
}

上面用到的square()函数被声明在了另一个文件中:

// Go36/article03/example01/calc.go
package main

func square(x int) int {
    return x * x
}

这里只声明了一个函数,可以在这个写更多关于计算的函数,这样在同个包里都可以方便的调用这些函数使用。
上面的2个文件都要在同一个目录下,并且需要被声明为属于同一个包。

执行代码

因为示例中都声明为main包,并且包里也有一个main函数。所以存在一个命令源码文件,这样就可以直接运行起来:

PS H:\Go\src\Go36\article03\example01> go run demo.go calc.go -x 3
3 的平方: 9
PS H:\Go\src\Go36\article03\example01>

上面注意要把所有的文件都写在命令里。
还可以先构建代码包,在执行:

PS H:\Go\src> go build Go36/article03/example01
PS H:\Go\src> .\example01.exe -x 4
4 的平方: 16
PS H:\Go\src>

先修改calc.go的路径,并且做一些修改:

// Go36/article03/example02/lib/calc.go
package lib2

func Square(x int) int {
    return x * x
}

这里创建了一个子目录,把文件放到了这个子目录中,这样使得它同命令源码文件不在同一个目录下了。
并行代码也做了一些修改:

  1. 包名变成了lib2,这里故意和目录不是同一个名字
  2. 函数名的首字母变成了大写

包名和目录名不同

现在要使用上面的包。导入包的路径应该是目录的路径名称:

import (
    "Go36/article03/example02/lib"
)

如果要构建或者安装这个代码包,使用的命令应该是下面这样,还是用目录名称:

go install Go36/article03/example02/lib

并且命令成功后,pkg子目录产生的归档文件也是目录名称:

pkg\windows_amd64\Go36\article03\example02\lib.a

但是最后调用的时候需要使用包名称,命令源码文件的代码如下:

// Go36/article03/example02/demo.go
package main

import (
    "flag"
    "fmt"
    "Go36/article03/example02/lib"
)

var x int

func init() {
    flag.IntVar(&x, "x", 0, "计算平方")
}

func main() {
    flag.Parse()
    res := lib2.Square(x)
    fmt.Println(x, "的平方:", res)
}

上面调用程序时使用的lib2.称为限定符。
结论:导入路径使用的是文件所在目录的路径。而调用程序时使用的限定符要与它声明的包的名称一致。
为了不在使用代码包是产生困惑,应该让声明的包的名称与其父目录的目录名称一致。

访问权限

在这里把函数名称的首字母改为大写的原因是,名称的首字母为大写的程序实体才可以被当前包外的代码引用,否则它就只能被当前包内的其他代码引用。
这涉及了Go语言中对于程序实体访问权限的规则。通过名称的首字母的大小写,就把访问权限分为了包级私有和公开这两种。对于包级私有,只有在包内部可以访问。由于我们需要在main包里调用lib包的函数,只能访问到公开的部分,所以需要把函数的首字母大写。

模块级私有
上面的访问权限都以包的级别进行划分的。在Go 1.5及后续版本中,可以通过创建internal代码包让一些程序实体仅仅能被当前模块中的其他代码引用。这是第三种访问权限:模块级私有。
具体规则是,internal代码包中声明的公开程序实体仅能被该代码包的直接父包及其子包中的代码引用。当然,引用前需要先导入这个internal包。对于其他代码包,导入该internal包都是非法的,无法通过编译。
这里的名称必须是internal,示例如下:

// 父级目录 Go36/article03/example03/demo.go
package main

import (
    "flag"
    "Go36/article03/example03/lib"
    //"Go36/article03/example03/lib/internal" // 此行无法通过编译。
)

var x int

func init() {
    flag.IntVar(&x, "x", 0, "计算平方")
}

func main() {
    flag.Parse()
    lib.Cale(x)
    //res := internal.Square(x)
    //lib.Cale(res)
}

// 子级目录 Go36/article03/example03/lib/demo_lib.go
package lib

import (
    "fmt"
    "Go36/article03/example03/lib/internal"
)

func Cale(x int) {
    res := internal.Square(x)
    fmt.Println(x, "的平方:", res)
}

// 孙子目录 Go36/article03/example03/lib/internal/internal.go
package internal

func Square(x int) int {
    return x * x
}

模块级私有的internal包,仅能被直接父包及其子包中的代码引用。上面如果要在父级里调用孙级目录的internal包,就是非法的:

PS H:\Go\src\Go36\article03\example03> go run demo.go -x 7
demo.go:6:2: use of internal package not allowed
PS H:\Go\src\Go36\article03\example03>

--结束END--

本文标题: Go36-3-代码包

本文链接: https://www.lsjlt.com/news/182795.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go36-3-代码包
    如果代码太复杂,就可以把代码写在多个源码文件里。或者是其他代码包中(这个后面讲) 代码示例 下面是程序的主体,但是其中调用了square()函数,这个函数并没有声明: // Go36/article03/example01/demo....
    99+
    2023-01-31
    代码
  • Flex Builder 3代码格式化方
    Flex Builder的最新版本已经到了4.5,可是代码格式化工具并没有集成在安装版本中,需要通过其他途径来实现。 下面提供一个安装插件的方法实现Flex代码格式化:      1. 点击菜单中的 Help-> Software ...
    99+
    2023-01-31
    代码 Flex Builder
  • Java IO学习笔记+代码(3)
    字符流处理package study.iostudy;import java.io.*;public class ProcesserCharacterStream{    public static void main(String[] a...
    99+
    2023-01-31
    学习笔记 代码 Java
  • golang安装代码包
    Golang(又称Go)是Google推出的一种编程语言,其设计简洁,运行速度快,在并发编程上有着出色的表现。由于其优势,越来越多的程序员开始使用Golang。在使用Golang之前,需要先安装Golang的代码包来编写和运行Golang程...
    99+
    2023-05-15
  • 3行Python代码实现剪辑音乐
    目录前言1.音量变化2.重复片段3.渐进渐出4.反转音乐前言 你没看错,Python剪辑音乐,只需要3行语句就能瞬间完成,比如我要剪辑33秒到1分10秒的音乐片段: from pyd...
    99+
    2022-11-11
  • 用代码帮你了解Python基础(3)
    目录1.循环2.字典3.集合总结1.循环 # 1.for...in循环,依次把list或tuple中的每个元素迭代出来 studentNames = ["Willard","Chen...
    99+
    2022-11-13
  • 使用2to3将代码移植到Python 3
    概述#几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下。为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会将你的Python 2程序源文件作...
    99+
    2023-01-31
    代码 Python
  • 3行Python代码完成人脸识别
    Face Recognition软件包这是世界上最简单的人脸识别库了。你可以通过Python引用或者命令行的形式使用它,来管理和识别人脸。该软件包使用dlib中最先进的人脸识别深度学习算法,使得识别准确率在《Labled Faces in ...
    99+
    2023-01-31
    代码 Python
  • python代码如何打包
    网上的文章对小白都不太友好呀,讲得都比较高大上,本文章就用最简单的方式来教会大家如何打包。既然各位已经学习到了python打包了, 深适度应该跟我查不多。 注意事项:   1. 这个插件只能打包 mac 、win系统运行的文件,也就是打...
    99+
    2023-09-13
    python 开发语言
  • 3行代码实现 Python 并行处理,速
    来源 | towardsdatascience.com 编译 | 数说君 出品 | 数说工作室 原标题:Here’s how you can get a 2–6x speed-up on your data pre-processing...
    99+
    2023-01-31
    代码 Python
  • Pycharm学习教程(3) 代码运行调试
    Pycharm代码运行调试,具体内容如下 1、准备工作   (1)Python版本为2.7或者更高版本   (2)已经创建了一个Python工程并且添加了内容,具体参考: Getting Started t...
    99+
    2022-06-04
    代码 教程 Pycharm
  • Python 3 学习笔记:异常代码调试
    什么是异常 程序运行过程中,产生的错误统称为异常(bug)。这些异常有的可能是语法错误,如关键字输入错误、调用错误等,这一类的异常都是显式的,很好发现;还有一种就是隐式的错误,只用在使用时才会被发现,和使用者的操作有关。 下面介绍一下 Py...
    99+
    2023-01-31
    学习笔记 异常 代码
  • 怎么封装Python代码包
    这篇文章主要介绍“怎么封装Python代码包”,在日常操作中,相信很多人在怎么封装Python代码包问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么封装Python代码包”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-16
  • LambdaQueryWrapper between 3天内 直接给出完整代码
    LambdaQueryWrapper是Mybatis Plus的动态SQL辅助类,可以帮助构建复杂的SQL语句。 在3天内的示例代码如下: LambdaQueryWrapperwrapper = new LambdaQueryWra...
    99+
    2023-10-09
    mybatis java mysql 数据库 sql
  • Python 3行代码提取音乐高潮部分
    目录1.原理简介2.代码编写2.1 安装所需要的项目2.2 编写代码3.效果检验4.批量提取前言: 有些时候,为了设定手机铃声或者发抖音视频,我们会耗费大量时间在剪辑音乐高潮部分上。...
    99+
    2022-11-12
  • php怎么实现3秒跳转?(代码示例)
    随着互联网的发展,用户对页面速度的要求越来越高,因此页面的加载时间成为了一项重要的考验。而在网页设计中,跳转功能也是一项经常被使用的功能,因此如何实现快速的跳转功能也成为了Web开发人员面临的一项技术难题。在本文中,我们将介绍如何使用PHP...
    99+
    2023-05-14
    定时跳转 php
  • 只用3行代码,让Python提速4倍!最
    Python是一门非常适合处理数据和自动化完成重复性工作的编程语言。我们在用数据训练机器学习模型之前,通常都需要对数据进行预处理,而Python就非常适合完成这项工作,比如需要重新调整几十万张图像的尺寸,用Python没问题!你几乎总是能找...
    99+
    2023-01-31
    代码 Python
  • Unity怎么打包代码到DLL
    今天小编给大家分享一下Unity怎么打包代码到DLL的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用Unity API P...
    99+
    2023-07-05
  • JavaScript闭包实例代码分析
    这篇文章主要介绍了JavaScript闭包实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript闭包实例代码分析文章都会有所收获,下面我们一起来看看吧。什么是闭包?闭包的概念是有很多版本...
    99+
    2023-07-05
  • 你所未知的3种Node.js代码优化方式
    Node.js 程序的运行可能会受 CPU 或输入输出操作的限制而十分缓慢。从 CPU 角度看,程序运行缓慢的典型原因之一就是未经优化的「热点路径」(一段经常被访问的代码)。从输入输出角度看,程序运行速度的...
    99+
    2022-06-04
    你所 代码 方式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作