• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

GO语言学习:代码拆分(包级私有和公共)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  为了便于理解,在此处用例子说明:

  在工作区下新建一个文件夹q0,在此文件夹中,

  使用命令vim demo0.go,写入以下代码

    package main

    import "flag"

    var name string

    var name1 string

    func init(){

      flag.StringVar(&name,"name","everyone","The greeting object.")

      flag.StringVar(&name1,"name1","everyone","The greeting object.")

    }

    func main(){

      flag.Parse()

      hello(name)

      showMsg(name1)

    }

  保存。

  使用命令 vim demo0_lib.go,输入以下代码

    package main

    import "fmt"

    func hello(name string){

      fmt.Printf("Hello,%s!\n",name)

    }

    func showMsg(name string){

      fmt.Printf("Hello,%s!\n",name)

    }

  保存。

  使用命令 go run demo0.go demo0_lib.go -name="jxd" -name1="xd" ,终端会打印

    Hello,jxd!

    Hello,xd!

  可以看出在demo0.go中,我们没有使用Printf,只是调用了hello函数和showMsg函数,但是这两个函数又声明在了其他地方(demo0_lib.go)

  这样代码就会被我们拆分,但是为什么呢?

  因为它们在同一目录下,并且被我们声明属于同一个main包。

2.同一文件拆分到不同目录下

  新建q1文件夹,拷贝demo0.go到此文件中变名为demo1.go

  修改demo1.go中的代码为:

    package main

    import (

        "flag"

        "article3/q1/lib"

        )

    var name string

    var name1 string

    func init(){

      flag.StringVar(&name,"name","everyone","The greeting object.")

      flag.StringVar(&name1,"name1","everyone","The greeting object.")

    }

    func main(){

      flag.Parse()

      lib.Hello(name)

      lib.ShowMsg(name1)

    }

  保存.

  在q1文件夹中新建lib文件夹,在lib中

  使用命令:vim demo1_lib.go,输入以下代码

    package lib

    import  "fmt"

    func Hello(name string){

      fmt.Printf("Hello,%s!\n",name)

    }

    func ShowMsg(name string){

      fmt.Printf("Hello,%s!\n",name)

    }

  保存.

  在q1目录的终端下使用命令 go run demo1.go 在终端打印

    Hello,everyone!

    Hello,everyone!

  

  我们在demo1.go中引入了“article3/q1/lib”,因此可以使用lib包中的代码,

  至于demo1_lib.go中的函数首字母大写,代表此函数可以被包外的代码引用。小写则为包级私有,即使包名被声明,但是也无法使用函数.

 

  我本人的代码目录介绍:

    usr/local/go   是安装目录

    usr/local/gopkg 是工作区

    usr/local/gopkg/src 存放源码

    usr/local/gopkg/pkg 存放 go install ***.go的归档文件  (在src下,使用命令 go install article3/q1/lib, 在src同级目录pkg下生成归档文件)

    

 

    demo1.go 的目录为/usr/local/src/article3/q1 下

    demo1_lib.go的目录为/usr/local/src/article3/q1/lib 下

3.模块级引用代码(internal)

  在article3目录下新建q2目录

  使用命令 vim demo2.go ,输入以下代码:

    package main

    import (

        "flag"

        "article3/q2/lib"

    )

    var name string

    func init(name string){

      flag.StringVar(&name,"name","everyone","The greeting object.")    

    }

    func main(){

      flag.Parse()

      lib.Hello(name)

    }

  保存.

  在q2目录下新建lib文件,在lib目录下

  使用命令 vim demo2_lib.go,输入以下代码

    package lib

    import(

        "os"

         in "article3/q2/lib/internal"

    )

    func Hello(name string){

      in.Hello(os.Stdout,name)

    }

  保存.

  在lib目录下新建internal文件,在internal目录下

  使用命令 vim internal.go,输入以下代码

    package internal

    import (

        "fmt"

        "io"

    )

    func Hello(w io.Writer,name string){

      fmt.Printf(w,"Hello,%s!\n",name)    

    }

  保存

  在q2目录下,使用命令 go run deno2.go ,在终端输出

    Hello,everyone!

  

  internal为模块级私有,只有他的直接上级和直接下级才可对它进行引用,其他的导包会出现错误。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Golang学习笔记(一)-Go语言环境安装以及运行代码发布时间:2022-07-10
下一篇:
go语言调用cmd发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap