美文网首页
Go中的注意事项

Go中的注意事项

作者: flow__啊 | 来源:发表于2017-03-29 21:52 被阅读18次
    • 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]
    */
    

    相关文章

      网友评论

          本文标题:Go中的注意事项

          本文链接:https://www.haomeiwen.com/subject/qjbyottx.html