Go - Package and Files


Package Variables
  1. Exported identifiers start with an upper-case letter
  2. files in the same package can be in the same folder
  3. Package level variables can't be duplicated, even they are in different files
// file:declaration/variables2.go
package declaration
import ()
var localVarInVariables = "localVarInVariables2"
var PackageVarInVariables = "PackageVarInVariables2"

// file:declaration/variables3.go
package declaration
import (
       "fmt"
)
func AccessDifferentFileVaraible() string {
       return fmt.Sprintf("%s\n%s\n", PackageVarInVariables, localVarInVariables)
}

// file:main/main.go
package main
import (
       "declaration"
       "fmt"
)
func main() {
       fmt.Printf("%s", declaration.AccessDifferentFileVaraible())
       fmt.Printf("%s", declaration.PackageVarInVariables)
       //     fmt.Printf("%s", declaration.localVarInVariables) // panic
}
Package functions
// main/main.go
package main
import (
       "declaration"
       "fmt"
)
func main() {
       fmt.Printf("PackageFunc:%s\n", declaration.PackageFunc())                                                  // func1.go
       fmt.Printf("PackageShowFunc:%s\n", declaration.PackageShowFunc())                                          // func2.go
       fmt.Printf("PackageShowFunc:%s\n",  declaration.NamedType("NamedTyped.PackageToString").PackageToString()) // func1.go
       //     fmt.Printf("PackageShowFunc:%s\n",  declaration.NamedType("NamedTyped.PackageToString").localToString())   //  func1.go, panic
}

// declaration/func1.go
package declaration
import (
       "fmt"
)
type NamedType string
func (n NamedType) PackageToString() string {
       return fmt.Sprintf("PackageToString:%s", n)
}
func (n NamedType) localToString() string {
       return fmt.Sprintf("localToString:%s", n)
}
func PackageFunc() string {
       return "PackageFunc"
}
func localFunc() string {
       return "localFunc"
}

// declaration/func2.go
package declaration
import (
       "fmt"
)
func PackageShowFunc() string {
       return fmt.Sprintf("PackageFunc:%s, LocalFunc:%s", PackageFunc(),  localFunc())
}


沒有留言:

張貼留言

別名演算法 Alias Method

 題目 每個伺服器支援不同的 TPM (transaction per minute) 當 request 來的時候, 系統需要馬上根據 TPM 的能力隨機找到一個適合的 server. 雖然稱為 "隨機", 但還是需要有 TPM 作為權重. 解法 別名演算法...