Pull out text within specific divs on a webpage
First of all: how big is this document? If you're not expecting it to be big, you may want to use html.Parse instead of a tokenizer - that way, you'll get the whole document in a tree and would be able to iterate over children of your div when found, which should make the whole thing simpler.

Your current approach is streaming, which conserves memory, but you are making the assumption that the div with the class project-title will always contain just text. What if the document looks like this:

&lt;div class="project-title"&gt;&lt;div&gt;not title&lt;/div&gt;title&lt;/div&gt;


or this

&lt;div class="project-title"&gt;&lt;/div&gt;&lt;div&gt;wrong title&lt;/div&gt;


In the first case, "not title" would be added. In the second, "wrong title" would be added.



Assuming you want to keep your logic as-is, let's move on the review!

A few general tips:


Always put string literals on top as constants (e.g. const className = "project-title").
You don't need to name your return values unless you see a need.
While Go values brevity, z is (almost) never a good variable name.
Most of the comments don't add any value (e.g. "Check if the token is an &lt;div&gt; tag").


Some specific things:


In isImageDiv, you don't need a separate if block. You also don't need to name the return value, which actually simplifies your code in this case. Finally, you should also check if the element is a div - that way, you needn't do it in crawl:

func isImageDiv(token html.Token) bool {
    if token.Data != "div" {
        return false
    }
    for _, a := range token.Attr {
        if a.Key == "class" &amp;&amp; a.Val == "project-title" {
            return true
        }
    }
    return false
}

getLabel seems too simple to have a need to exist.
In crawl, you shouldn't use fmt.Println. Instead, return an error, the same way http.Get returns it. Let the caller handle it.
In crawl, you can simplify the switch a lot - continue is not really needed and we made our isImageDiv function do the div check as well:

switch tt {
case html.ErrorToken:
    return
case html.StartTagToken:
    if isImageDiv(z.Token()) {
        readText = true
    }
case html.TextToken:
    if readText {
        *foundLabels = append(*foundLabels, getLabel(z))
        readText = false
    }
}

In main, you don't need to use make for a slice since the default value for a slice is an empty slice (you can just define it as var foundLabels []string and it will just work). Also, you shouldn't pass the slice as a pointer - slices are passed by reference anyway (not really, but due to the nature of how they work, they're already pointers). Make sure you change your crawl function as well after that.