go语言内置规定

go语言内置的一些规定 #

总结go语言内置的一些规定 即go语言的默认行为
1. 变量
2. 常量
3. 函数
4. 结构体
5. 接口

大写字母开头的是可导出的,是公有的,也可以被其它包读取和使用
小写字母开头的是不可导出的,是私有的,只能本包读取和使用,不能被其它包读取使用
即公有的可跨包访问、私有的只能本包内访问
以上可见性规则适用于 变量、常量、函数、结构体及结构体中字段、接口及接口中方法

变量及示例 #

大写字母开头的变量是可导出的,即也可以被其它包读取,是公有变量
小写字母开头的变量是不可导出的,是私有变量,只能本包读取,不能被其它包读取
示例:
cjs/cjs.go文件内容如下:
package cjs
import "fmt"
var name = "jelly" //仅本包可见,即在cjs包内可见
var Age = 28 //本包可见,同时也可被其它包访问
func Say()  {
	fmt.Printf("name=%v,Age=%v", name,Age) //name=jelly,Age=28
}

main.go文件内容如下:
package main
import (
	"fmt"
	"jellygo1/cjs"
)
func main()  {
	cjs.Say() //name=jelly,Age=28
	fmt.Println()
	fmt.Println(cjs.Age) //28
	//fmt.Println(cjs.name) //报语法错误:cannot refer to unexported name cjs.name
}

常量及示例 #

大写字母开头的常量是可导出的,是公有常量,也可以被其它包读取
小写字母开头的常量是不可导出的,是私有常量,只能本包读取,不能被其它包读取
示例:
cjs/cjs.go文件内容如下:
    package cjs
    import "fmt"
    const name = "jelly" //本包可见
    const Age = 28 // 也可被其它包访问
    const USER_KIND_HV  = "hv"
    func Say()  {
        fmt.Printf("name=%v,Age=%v,USER_KIND_HV=%v", name,Age,USER_KIND_HV) //name=jelly,Age=28,USER_KIND_HV=hv
    }

main.go文件内容如下:
    package main
    import (
        "fmt"
        "jellygo1/cjs"
    )
    func main()  {
        cjs.Say() //name=jelly,Age=28,USER_KIND_HV=hv
        fmt.Println()
        fmt.Println(cjs.Age) //28
        fmt.Println(cjs.USER_KIND_HV) //hv
        //fmt.Println(cjs.name) //报语法错误:cannot refer to unexported name cjs.name 和 undefined: cjs.name
    }

函数及示例 #

示例:
cjs/cjs.go文件内容如下:
    package cjs
    import "fmt"
    //本包可见,同时也可被其它包可见
    func Say()  {
        fmt.Println("我是cjs包Say方法")
        hi()
    }
    //本包可见
    func hi()  {
        fmt.Println("我是cjs包hi方法")
    }
main.go文件内容如下:
    package main
    import (
    	"jellygo1/cjs"
    )
    func main()  {
    	cjs.Say() //我是cjs包Say方法 我是cjs包hi方法
    	//cjs.hi() //报语法错误:cannot refer to unexported name cjs.hi 和 undefined: cjs.hi
    }

结构体及示例 #

示例:
cjs/cjs.go文件内容如下:
    package cjs 
    import "fmt"
    //本包可见,同时其它包也可使用
    type UserInfo struct {
    	account string //仅本包可见
    	Nickname string  //本包可见,同时其它包也可使用
    	age int  //仅本包可见
    	Pwd string //本包可见,同时其它包也可使用
    }
    //本包可见,同时也可被其它包可见
    func Say() *UserInfo {
    	return hi()
    }
    //本包可见
    func hi() *UserInfo {
    	ui := &UserInfo{account:"admin",Pwd:"123456"}
    	fmt.Printf("%#v \n",ui)
    	return ui
    }

main.go文件内容如下:
    package main
    import (
        "fmt"
        "jellygo1/cjs"
    )
    func main()  {
    	ui1 := cjs.Say() //&cjs.UserInfo{account:"admin", Nickname:"", age:0, Pwd:"123456"}
    	fmt.Println(ui1.Pwd) //123456
    	//fmt.Println(ui1.account) //报字段不可见错误,ui1.account undefined (cannot refer to unexported field or method account)
    
    	//ui2 := &cjs.UserInfo{account:"admin",Pwd:"123456"} //报不可见字段错误:unknown field 'account' in struct literal of type cjs.UserInfo
    
    	ui3 := &cjs.UserInfo{Pwd:"123456"}
    	fmt.Println(ui3.Pwd) //123456
    
    }

接口及示例 #


Build by Loppo 0.6.15