Go中的3个变量映射

I am trying to make a 3 variable map in go so that you can do something like.

var postlist = make(map[int][int]bool)

postlist[postid][userid] = true

if postid[postid][userid] = true {
   //do something
}

I have tried to make my own using a struct like

var postlist = make(map[int]cusmap)

type cusmap struct {
    userid     int
    seen       bool
}

but then I don't know how to check to check both the userid and seen bool condition.

I am not sure what you are trying to do, but a map is only a key/value. You can't have key/key/value. In order to do this, you need the value to be a map, so you would do:

http://play.golang.org/p/dOAXNAI4CO

package main

func main() {
    var postlist = make(map[int]map[int]bool)

    postid, userid := 0, 0

    postlist[postid] = make(map[int]bool)
    postlist[postid][userid] = true

    if postlist[postid][userid] == true {
        println("ok")
    } else {
        println("ko")
    }
}

An alternative to @creack's approach is to define funcs on the map itself that way you don't have to manually check every time you want to set / unset something:

func main() {
    cm := CustMap{}

    pid, uid := 0, 0

    cm.Set(pid, uid)

    fmt.Println(cm.Exists(pid, uid))
    fmt.Println(cm.Exists(pid, 10))
    fmt.Println(cm.Exists(10, 10))
}

type CustMap map[int]map[int]struct{} //struct makes the map use 0 bytes for values instead of 1 bytes for bools, handy as the map grows

func (cm CustMap) Set(pid, uid int) {
    if _, ok := cm[pid]; !ok {
        cm[pid] = make(map[int]struct{})
    }
    cm[pid][uid] = struct{}{}
}

func (cm CustMap) Exists(pid, uid int) (ok bool) {
    if u := cm[pid]; u != nil {
        _, ok = u[uid]
    }
    return
}

playground

If you want to implement a set of int pairs, you can use a structure as the map key:

type postData struct {
    userID int
    postID int
}

Then make a map with postData keys and bool values:

postSet := map[postData]bool{
    postData{1234, 7284}: true,
    postData{7777, 1212}: true}

We can exploit the fact that if we give a non-existent index to the map, it will just return a zero-value. For bool, the zero-value is false.

if postSet[postData{7777, 1212}] {
    fmt.Println("post found.")
} else {
    fmt.Println("no such post!")
}

Here's a full working example: http://play.golang.org/p/VJw9Vm8gHA