Goでの注意

1631 ワード

  • 1 structを用いてJsonに解析する場合
  • フィールド小文字
  • をエクスポートしたくない場合
  • フィールドをエクスポートしたくないし、他のプログラムで使いたいならgetter/setterを使わないと、解けません.
  • json名をカスタマイズしたい場合は、json:xxx
  • を後に付けます.
  • 2従来のオブジェクト向けの特徴
  • マルチステート:interface
  • のみ
  • パッケージ:メソッド/変数小文字はパッケージ内アクセス、大文字はパッケージ外
  • アクセス
  • 汎用:いいえ.しかし、個人的には、インタフェースを通じて-->実装を規定することができると思います.例えば、異なるタイプのソートアルゴリズムです.
  • //       ,  
    type Sortable interface {
        Len() int
        Less(int, int) bool
        Swap(int, int)
    }
    
    func bubbleSort(array Sortable) {
        for i := 0; i < array.Len(); i++ {
            for j := 0; j < array.Len()-i-1; j++ {
                if array.Less(j+1, j) {
                    array.Swap(j, j+1)
                }
            }
        }
    }
    
    //         
    type IntArr []int
    
    func (array IntArr) Len() int {
        return len(array)
    }
    
    func (array IntArr) Less(i int, j int) bool {
        return array[i] < array[j]
    }
    
    func (array IntArr) Swap(i int, j int) {
        array[i], array[j] = array[j], array[i]
    }
    //        ,      
    type StringArr []string
    
    func (array StringArr) Len() int {
        return len(array)
    }
    func (array StringArr) Less(i int, j int) bool {
    //           ,       
        return len(array[i]) < len(array[j])
    }
    func (array StringArr) Swap(i int, j int) {
        array[i], array[j] = array[j], array[i]
    }
    //  
    func main() {
        intArray1 := IntArr{3, 4, 2, 6, 10, 1}
        bubbleSort(intArray1)
        fmt.Println(intArray1)
        stringArray1 := StringArr{"hello", "i", "am", "go", "lang"}
        bubbleSort(stringArray1)
        fmt.Println(stringArray1)
    }
    /*     :
    [1 2 3 4 6 10]
    [i am go lang hello]
    */