Go Stack
\ntype Node struct {\n    Val int\n    Prev *Node\n    Min int\n}\n\ntype MinStack struct {\n    head *Node\n}\n\nfunc Constructor() MinStack {\n    return MinS
```\ntype Node struct {\n    Val int\n    Prev *Node\n    Min int\n}\n\ntype MinStack struct {\n    head *Node\n}\n\nfunc Constructor() MinStack {\n    return MinStack{\n        head: &Node{\n            Min: math.MaxInt32,\n        },\n    }\n}\n\n\nfunc (this *MinStack) Push(val int)  {\n    min := Min(this.head.Min, val)\n    this.head = &Node{\n        Val: val,\n        Prev: this.head,\n        Min: min,\n    }\n}\n\n\nfunc (this *MinStack) Pop()  {\n    this.head = this.head.Prev\n}\n\n\nfunc (this *MinStack) Top() int {\n    return this.head.Val\n}\n\n\nfunc (this *MinStack) GetMin() int {\n    return this.head.Min\n}\n\nfunc Min(a,b int) int {\n    if a<b { return a }\n    return b\n}\n\n\n/**\n * Your MinStack object will be instantiated and called as such:\n * obj := Constructor();\n * obj.Push(val);\n * obj.Pop();\n * param_3 := obj.Top();\n * param_4 := obj.GetMin();\n */\n```
['Stack', 'Go']