# The Behavior Of Channels

DevFeed: [The Behavior Of Channels](<https://devfeed.tech/articles/the-behavior-of-channels-22130.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2017/10/the-behavior-of-channels.html>)

Published: 2017-10-24T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Code](<https://devfeed.tech/topics/code.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [ardan-labs](<https://devfeed.tech/tags/ardan-labs.md>), [blog](<https://devfeed.tech/tags/blog.md>), [channel](<https://devfeed.tech/tags/channel.md>), [concurrent](<https://devfeed.tech/tags/concurrent.md>), [go](<https://devfeed.tech/tags/go.md>), [go-programming](<https://devfeed.tech/tags/go-programming.md>), [golang](<https://devfeed.tech/tags/golang.md>), [goroutines](<https://devfeed.tech/tags/goroutines.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [programming](<https://devfeed.tech/tags/programming.md>), [signal](<https://devfeed.tech/tags/signal.md>)

## AI overview

This tutorial explains Go channels as signaling mechanisms between goroutines rather than merely as queue-like data structures. It introduces guarantee of delivery, channel state, and signaling with or without data, and describes how buffered and unbuffered channels differ in delivery behavior.

## Source excerpt

Introduction When I started to work with Go's channels for the first time, I made the mistake of thinking about channels as a data structure. I saw channels as a queue that provided automatic synchronized access between goroutines. This structural understanding caused me to write a lot of bad and complicated concurrent code. I learned over time that it's best to forget about how channels are structured and focus on how they behave. So now when it comes to channels, I think about one thing: signaling. A channel allows one goroutine to signal another goroutine about a particular event. Signaling is at the core of everything you should be doing with channels. Thinking of channels as a signaling mechanism will allow you to write better code with well defined and more precise behavior.