Go中的注意事项

  • 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]
*/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,179评论 19 139
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,430评论 30 472
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 10,492评论 0 13
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,770评论 0 6
  • 下午四点半准时收看了中央电视台“讲宪法懂宪法”节目,女儿津津有味地看着,还时不时地为某一个队加油,天津队一个女...
    尚源希妈妈阅读 3,649评论 0 0

友情链接更多精彩内容