Golangで下記のコードを実行するとdeadlockを起こします。
SetValueの中で、引数として与えられたvalueg.CHに渡す時にdeadlockになっているようです。
なぜ、deadlockになってしまうのでしょうか?


package main

import (
    "fmt"
)

type GeneratorChannel struct {
    X  int
    CH chan int
}

func New() *GeneratorChannel {
    s := GeneratorChannel{}
    s.CH = make(chan int)
    return &s
}

func (g *GeneratorChannel) SetValue(value int) {
    g.X = value
    g.CH <- g.X

}
func (g *GeneratorChannel) GetChannelValue() int {
    return <-g.CH
}

func main() {
    g := New()
    g.SetValue(4)
    fmt.Println(g.GetChannelValue())

}