Go channels only sending values : I am learning channels in GO and following this [tutorial][1]
When I only send value to a channel it gives error. Here is the example code.

    package main

    import "fmt"

    func main() {
	  ch := make(chan int)
	  ch <- 1
	
	  fmt.Println("Does not work")
    }

Here I am just sending value to the channel but not receiving anything. It give an error 

    fatal error: all goroutines are asleep - deadlock! 

But when I run following code it doesn't give any error

    package main

    import "fmt"

    func sum(s []int, c chan int) {
	    sum := 0
	    for _, v := range s {
		    sum += v
	    }
	    c <- sum // send sum to c
    }

    func main() {
	    s := []int{7, 2, 8, -9, 4, 0}

	    c := make(chan int)
	    go sum(s[:len(s)/2], c)
	    go sum(s[len(s)/2:], c)
	
	    fmt.Println("did not receive but still works")
    }

and prints 

    did not receive but still works

I couldn't understand why it works in second case while it does not work in first case. Even though I have not received any value for the channel in both cases. Also what is causing the deadlock in first case and how it gets avoided in second case? 

  [1]: https://tour.golang.org/concurrency
