goオブジェクト向けプログラミング——パッケージ


パッケージのメリット
  • 実装詳細を隠す
  • データを検証し、安全で合理的であることを保証する
  • パッケージの実装方法
  • 構造体の属性をカプセル化
  • 方法、パッケージによるパッケージ化
  • パッケージの実装手順
  • 構造体・属性のフィールドを小文字にする
  • 構造体が存在するパッケージにファクトリモードを提供し、頭文字は大文字で、構造関数
  • に似ている.
  • 属性の判断と付与
    func (c *student)SetScore(score float64){
    	c.score = score
    }
    
  • 属性値
    func (c *student)PutScore()float64{
    	return c.score
    }
    
  • を取得するための頭文字大文字Getメソッドを提供する
    example
  • main.go
    package main
    
    import (
    	"fmt"
    	"newStudy/fengzhuang/account"
    )
    func main(){
    	var account = account.NewAccount()
    	var err error
    	err = account.SetUser("ganganlee")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    
    	err = account.SetPassword("123456")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	err = account.SetScore(21)
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(account)
    }
    
  • account.go
    package account
    
    import "github.com/pkg/errors"
    
    //     
    type Account struct {
    	user string
    	score float64
    	passWord string
    }
    
    //    
    func NewAccount() *Account {
    	return &Account{}
    }
    
    //     
    func (c *Account)SetUser(user string) error  {
    	if len(user)<6 || len(user)>10 {
    		return errors.New("        ")
    	}
    	c.user = user
    	return  nil
    }
    
    //     
    func (c *Account)GetUser()string{
    	return  c.user
    }
    
    //      
    func (c *Account)SetScore(score float64) error  {
    	if score < 20 {
    		return errors.New("      20")
    	}
    	c.score = score
    	return  nil
    }
    
    //      
    func (c *Account)GetScore()float64{
    	return  c.score
    }
    
    //      
    func (c *Account)SetPassword(password string) error  {
    	if len(password) != 6 {
    		return errors.New("         6 ")
    	}
    	c.passWord = password
    	return  nil
    }
    
    //      
    func (c *Account)GetPassword()string{
    	return  c.passWord
    }