21-Golang結(jié)構(gòu)體---New函數(shù)和可見性

New函數(shù)

Go 語言中常定義 new 結(jié)構(gòu)體名命名的函數(shù)用于創(chuàng)建對應(yīng)的結(jié)構(gòu)體值對象或指針對象。

package main

import "fmt"

// 定義Address結(jié)構(gòu)體
type Address struct {
    Region string
    Street string
    Number string
}

// 定義User結(jié)構(gòu)體
type User struct {
    ID   int
    Name string
    Addr *Address
}

// NewUser函數(shù)返回User結(jié)構(gòu)體
func NewUser(id int, name string, Region, Street, Number string) User {
    return User{
        ID:   id,
        Name: name,
        Addr: &Address{Region, Street, Number},
    }
}

func main() {
    //調(diào)用函數(shù)
    u := NewUser(2, "wpfs", "北京市", "海淀", "0001")
    fmt.Printf("%#v\n", u)
    fmt.Println(u.Addr)
    //更改元素
    u.Addr.Region = "天津"
    fmt.Println(u.Addr)
}

結(jié)構(gòu)體可見性

mkdir visibility
go mod init visibility
mkdir visibility/users
wupengfei@wupengfeideAir visibility % tree .
.
├── go.mod
├── main.go
└── users
    └── users.go

2 directories, 3 files

users/users.go

package users

// 定義address結(jié)構(gòu)體
type address struct {
    Region string
    Street string
    Number string
}

// 定義User結(jié)構(gòu)體
type User struct {
    ID   int
    Name string
    address
}

main.go

package main

import (
    "fmt"
    "visibility/users"
)

func main() {
    /*
        type StructName struct {}

        結(jié)構(gòu)體m名字
        StructName
        structName

        屬性:
        AttrName
        attrName

        匿名結(jié)構(gòu)體嵌套
        S A => s A => 結(jié)構(gòu)體名小寫, 包外不能創(chuàng)建結(jié)構(gòu)體對象
        S a => s a => 結(jié)構(gòu)體名小寫, 包外不能創(chuàng)建結(jié)構(gòu)體對象

        S A => S A => 結(jié)構(gòu)體名大寫, 包外可以創(chuàng)建結(jié)構(gòu)體對象, 屬性名大寫, 屬性也可以訪問
        S a => S a => 結(jié)構(gòu)體名大寫, 包外可以創(chuàng)建結(jié)構(gòu)體對象, 屬性名小寫, 屬性不可以訪問

        s A => S A => 結(jié)構(gòu)體名大寫, 包外可以創(chuàng)建結(jié)構(gòu)體對象, 屬性名大寫, 屬性也可以訪問
        s a => S a => 結(jié)構(gòu)體名大寫, 包外可以創(chuàng)建結(jié)構(gòu)體對象, 屬性名小寫, 屬性不可以訪問

        s A => s A => 結(jié)構(gòu)體名小寫, 包外不能創(chuàng)建結(jié)構(gòu)體對象
        s a => s a => 結(jié)構(gòu)體名小寫, 包外不能創(chuàng)建結(jié)構(gòu)體對象
    */
    var u users.User
    //var a users.address
    fmt.Printf("%#v\n", u)
    //fmt.Printf("%#v", a)

    fmt.Printf("%#v\n", u.ID)
    fmt.Printf("%#v\n", u.Name)
    fmt.Printf("%#v\n", u.Region)
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容