zoukankan      html  css  js  c++  java
  • GO语言学习:代码拆分(包级私有和公共)

    1.把一个文件拆分为多个(同级目录)

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

      在工作区下新建一个文件夹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! ",name)

        }

        func showMsg(name string){

          fmt.Printf("Hello,%s! ",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! ",name)

        }

        func ShowMsg(name string){

          fmt.Printf("Hello,%s! ",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! ",name)    

        }

      保存

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

        Hello,everyone!

      

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

    不为其他,只为快乐!
  • 相关阅读:
    Type Safety and Type Inference
    LEARN SWIFT
    swift 类型备份
    Swift
    associatedtype关联类型
    深入理解 Swift 派发机制
    Swift中self和Self
    Postfix Self Expression
    CGContext与上下文
    eeee
  • 原文地址:https://www.cnblogs.com/1521299249study/p/10042356.html
Copyright © 2011-2022 走看看