• 辉仔lovers
    2019-03-08
    java的hashset是通过hashmap实现的,存放到hashset中的值,会调用hashcode(key)找到需要存放在底层数组中的位置,然后通过equals(key)判断该值是不是存在,存在的话则表面是重复的,不再继续往set中添加,老师实现set的方式的关键是map[int]bool 中的布尔值默认是false的,这样直接if判断,写出来的代码非常巧妙。
     1
     4
  • 月寒风清
    2020-01-03
    老师可以解释下什么是Dock type吗?

    作者回复: duck typing
    俚语:如果一个东西像鸭子一样走路和呱呱叫,那么它一定是鸭子

    计算机领域中,duck typing相对应的是normal typing(对象的类型决定了对象的特性),duck typing中对象的类型不重要,只要对象有类型A的方法和属性,那么它被当做类型A来使用。

    所以,在Go中只要你的对象拥有某个接口定义的方法,就可以当作那个接口类型的实例来使用,无需显式的声明

    
     2
  • 刘楠
    2019-03-08
    set情况下,value只能是true吗?如果为false,判断就会不存在了

    作者回复: 没错,添加元素要设置true

    
     2
  • 阿鹏
    2019-03-07
    java中HashSet内部也是用HashMap实现的
    
     2
  • 碧雪天虹
    2019-10-17
    1. 试了一下, lambda定义的时候, 形参op是可以省略的

    func TestMapWithFunValue(t *testing.T) {
        m1 := map[int]func(int) int{}
        m1[1] = func(op int) int { return op }
        m1[2] = func(op int) int { return op * op }
        m1[3] = func(op int) int { return op * op * op }
        t.Log(m1[1](2), m1[2](2), m1[3](2))
    }

    2. 用map[type]bool代替set[type]是一个巧妙的技巧, 但也需要意识到 map[key] = false 这种隐患
    展开
    
     1
  • 登高
    2019-03-08
    请问老师,用map做set时也常用map[type]struct{},更好的实践是哪一种呢?还是根据使用场景来选择?

    作者回复: 我认为map[type]bool更好,代码会更自然,如判断一个元素是否存在 if m[key] {...}

     1
     1
  • styun
    2019-08-13
    老师问下,set时候,map后面的花括号的作用是什么,不加也可以吧

    作者回复: 表示创建一个map实例。如果不要花括号可以用make来创建:set := make(map[int]bool)

     1
    
  • 啊Ray
    2019-06-07
    在golang如何实现set的差集,并集,对称差?
    
    
  • 坤
    2019-05-08
    这个没有验证元素的唯一性吧?

    作者回复: key在map中是唯一的

     1
    
  • 张sir
    2019-04-20
    感觉老师写代码的时间太长了,建议多些讲解,把代码打印输出之类的东西简化
    
    
  • JeffreyBool
    2019-04-09
    map set 一并发不就凉凉了
    
    
  • butterfly
    2019-03-25
    怎么实现有序的map,set? 有些场景需要插入和删除的效率在o(logn),有序的map是适合的.
    如果是放入map,再取出来排序的方式,对于写少读多,但需要集合中元素有序的情况,却是不太适合

    作者回复: 你可以参考java的TreeMap的实现方式,自己实现一下

    
    
  • kaixiao7
    2019-03-16
    老师, 在实现Set时您是用int举例的: map[int]bool, 怎么将key的类型设置为通用类型(类似Java中的泛型), 这样就可以实现一个通用的Set了.
     1
    
  • 正义柔情永在
    2019-03-12
    老师:百忙之中,跪请解惑啊

    //===============定义接口=======================
    package interfaces
    type TCPGet interface {
        Get(url string) string
    }
    type TCPPost interface {
        Post(url string) string
    }
    type TCP interface {
        TCPGet
        TCPPost
    }
    //=======定义实现===============================
    package interfaces

    type Http struct {
        Content string
    }

    func (http Http) Get(url string) string {
        return http.Content+"->this is get request"
    }

    func (http Http) Post(url string) string {
        return http.Content+"->this is post request"
    }

    //=================主程序========================

    const url ="http://www.baidu.com"

    func main() {

        var myhttpStruct = interfaces.Http{Content: "接口测试"}
        //接口可以指向实现了该接口的结构体的指针,
        //这个指针通过解地址就可以拿到这个结构体,
    //问题1:老师,go语言中是不是实现了某个接口的结构体的指针都可以使用该接口去接收?
        var http interfaces.TCP = &myhttpStruct
        fmt.Printf("%T , %T ,%T\n",myhttpStruct,http,&http)
        Myrequest(&http) //获取到这个接口的指针,也就是 这个结构体的指针的指针

        var httpx * interfaces.TCP = &(&interfaces.Http{Content: "接口测试"})
           //问题2,老师,为什么这种语法就不行呢?

        fmt.Printf("%T\n",httpx)
    }

    func Myrequest(http * interfaces.TCP) {//这个

        //http 是接口的指针,通过解一次地址获取到的是结构体的指针,通过结构体的指针调用该结构体下的方法
        fmt.Printf("%T , %T\n",http,*http)

        fmt.Println((*http).Get(url))
        fmt.Println((*http).Post(url))
    }
    展开

    作者回复: 第一个问题答案是“是”
    第二个问题是因为
    接口对应的是结构体的指针,我们不使用接口的指针(因为他指向的并不是实现接口的具体类型)

    所以你的方法应该定义为
    func Myrequest(http interfaces.TCP)

    
    
  • Aliliin
    2019-03-10
    这节课有点没看懂,set 是干嘛的。只会PHP一门语言。
     1
    
  • 多米
    2019-03-09
    非常赞;但是 能不能在提高下难度哈!

    作者回复: 进阶课程会更有难度。整体课程的宗旨是简明,希望能够让你把其他语言的编程经验快速发挥到Go中,同时,又能掌握Go语言的独特编程特性。

    
    
  • 刘楠
    2019-03-08
    同一个文件夹下,多个测试文件就运行不了了
    can't load package: package .: found packages map1 (map1_test.go) and map (map_test.go) in D:\gowork\go_learning\src\ch7\map
    只能是一个吗?

    作者回复: 同以目录下,源码文件中的包名要一样

     1
    
  • 卡乐
    2019-03-07
    老师能不能推荐一本入门级的书看一下,感觉看课程之余再多看看书才能够更快更好的理解。

    作者回复: head first go

    
    
我们在线,来聊聊吧