Let's show how it works, with these code samples:  
Let's simplify your first sample, see this working sample code (1):  
package main
import "fmt"
func main() {
    a := 100
    {
        fmt.Println(a) // 100
        a, b := 0, 0
        fmt.Println(a, b) // 0 0
    }
    fmt.Println(a) // 100
}
output:  
100
0 0
100
so a in a, b := 0, 0 is shadowed, this a is new variable,
this is called Variable scoping and shadowing,
and you may name it e.g. c like this code for now to show how it works (2):
package main
import "fmt"
func main() {
    a := 100
    {
        fmt.Println(a) // 100
        c, b := 0, 0
        fmt.Println(c, b) // 0 0
    }
    fmt.Println(a) // 100
}
the output is that same as (1):
100
0 0
100
and lets simplify your next sample code (3):
package main
import "fmt"
func main() {
    a := 0
    b := byte(0)
    {
        fmt.Println(a, b) // 0 0
        a, b = 1, byte(1)
        fmt.Println(a, b) // 1 1
    }
    fmt.Println(a, b) // 1 1
}
output:
0 0
1 1
1 1
so here a and b are the same inside and outside loop.
also see: Where can we use Variable Scoping and Shadowing in Go?
and see:
What is the difference between := and = in Go?