プログラミング言語 golang go package Go 言語パッケージの概要と実装の詳細

Go 言語パッケージの概要と実装の詳細

 
 
Go 言語のカプセル化とは、抽象化されたフィールドとそのフィールドに対する操作を一緒にカプセル化することであり、データは内部で保護され、プログラムの他のパッケージは承認されたメソッドを通じてのみフィールド上で操作できます。

 

カプセル化の利点:

  • 実装の詳細を非表示にします。
  • データを検証して、データが安全かつ合理的であることを確認できます。

カプセル化を反映する方法:

  • プロパティを構造体にカプセル化します。
  • カプセル化はメソッドやパッケージを通じて実現されます。

カプセル化の実装手順:

  • 構造体とフィールドの最初の文字を小文字にします。
  • コンストラクターと同様に、構造体が配置されているパッケージの最初の文字を大文字にしてファクトリ モード関数を提供します。
  • 属性を判断して値を割り当てるための、大文字の Set メソッド (他の言語の public と同様) を提供します。
  • プロパティの値を取得するには、大文字の Get メソッド (他の言語の public と同様) を提供します。

【例】従業員の場合、年齢や給与などのプライバシーを気軽に確認することはできず、入力された年齢については合理的な確認が行われます。コード構造は次のとおりです。

 

person.go のコードは次のようになります。

package model

import "fmt"
type person struct {
    Name string
    age int   //他のパッケージから直接アクセスできない..
    sal float64
}

//工場模様の関数を書く、コンストラクタに相当
func NewPerson(name string) *person {
    return &person{
        Name : name,
    }
}

//年齢と給与にアクセスするために、2つのSetXxxメソッドと2つのGetXxxメソッドを作成する
func (p *person) SetAge(age int) {
    if age >0 && age <150 {
        p.age = age
    } else {
        fmt.Println("年齢の範囲が正しくありません..")
        //デフォルト値をプログラマに与えます
    }
}
func (p *person) GetAge() int {
    return p.age
}

func (p *person) SetSal(sal float64) {
    if sal >= 3000 && sal <= 30000 {
        p.sal = sal
    } else {
        fmt.Println("給与範囲が正しくありません..")
    }
}

func (p *person) GetSal() float64 {
    return p.sal
} 

main.go のコードは次のようになります。

package main

import (
    "fmt"
    "../model"
)

func main() {

    p := model.NewPerson("smith")
    p.SetAge(18)
    p.SetSal(5000)
    fmt.Println(p)
    fmt.Println(p.Name, " age =", p.GetAge(), " sal = ", p.GetSal())
} 
 
 

「 Go 言語パッケージの概要と実装の詳細」についてわかりやすく解説!絶対に観るべきベスト2動画

【元Javaエンジニア】Go言語の将来性・できること・メリットは?
【初心者必見!】Go言語とは?できることや学ぶメリット・将来性について解説
 
 
Go 言語のカプセル化とは、抽象化されたフィールドとそのフィールドに対する操作を一緒にカプセル化することであり、データは内部で保護され、プログラムの他のパッケージは承認されたメソッドを通じてのみフィールド上で操作できます。

 

カプセル化の利点:

  • 実装の詳細を非表示にします。
  • データを検証して、データが安全かつ合理的であることを確認できます。

カプセル化を反映する方法:

  • プロパティを構造体にカプセル化します。
  • カプセル化はメソッドやパッケージを通じて実現されます。

カプセル化の実装手順:

  • 構造体とフィールドの最初の文字を小文字にします。
  • コンストラクターと同様に、構造体が配置されているパッケージの最初の文字を大文字にしてファクトリ モード関数を提供します。
  • 属性を判断して値を割り当てるための、大文字の Set メソッド (他の言語の public と同様) を提供します。
  • プロパティの値を取得するには、大文字の Get メソッド (他の言語の public と同様) を提供します。

【例】従業員の場合、年齢や給与などのプライバシーを気軽に確認することはできず、入力された年齢については合理的な確認が行われます。コード構造は次のとおりです。

 

person.go のコードは次のようになります。

package model

import "fmt"
type person struct {
    Name string
    age int   //他のパッケージから直接アクセスできない..
    sal float64
}

//工場模様の関数を書く、コンストラクタに相当
func NewPerson(name string) *person {
    return &person{
        Name : name,
    }
}

//年齢と給与にアクセスするために、2つのSetXxxメソッドと2つのGetXxxメソッドを作成する
func (p *person) SetAge(age int) {
    if age >0 && age <150 {
        p.age = age
    } else {
        fmt.Println("年齢の範囲が正しくありません..")
        //デフォルト値をプログラマに与えます
    }
}
func (p *person) GetAge() int {
    return p.age
}

func (p *person) SetSal(sal float64) {
    if sal >= 3000 && sal <= 30000 {
        p.sal = sal
    } else {
        fmt.Println("給与範囲が正しくありません..")
    }
}

func (p *person) GetSal() float64 {
    return p.sal
} 

main.go のコードは次のようになります。

package main

import (
    "fmt"
    "../model"
)

func main() {

    p := model.NewPerson("smith")
    p.SetAge(18)
    p.SetSal(5000)
    fmt.Println(p)
    fmt.Println(p.Name, " age =", p.GetAge(), " sal = ", p.GetSal())
} 
 
 

「 Go 言語パッケージの概要と実装の詳細」についてわかりやすく解説!絶対に観るべきベスト2動画

【元Javaエンジニア】Go言語の将来性・できること・メリットは?
【初心者必見!】Go言語とは?できることや学ぶメリット・将来性について解説