DEV Community

jguo
jguo

Posted on

1 1

Learning Golang 102

Semicolons

Like C, Go's formal grammar uses semicolons to terminate statements, but unlike in C, those semicolons do not appear in the source.
One consequence of the semicolon insertion rules is that you cannot put the opening brace of a control structure (if, for, switch, or select) on the next line.

if i < f() {
    g()
}
Enter fullscreen mode Exit fullscreen mode

not like this

if i < f()  // wrong!
{           // wrong!
    g()
}
Enter fullscreen mode Exit fullscreen mode

Control structures

  • No do or while loop. Only generalized for, switch, if and select. Both of them accept an optional initialization statement.
  • break and continue statements take an optional label to identify what to break or continue;

If with an initialization statement.

if err := file.Chmod(0664); err != nil {
    log.Print(err)
    return err
}
Enter fullscreen mode Exit fullscreen mode

For

There are three forms.

// Like a C for
for init; condition; post { }

// Like a C while
for condition { }

// Like a C for(;;)
for { }
Enter fullscreen mode Exit fullscreen mode

range clause can manage the loop. For key and value data, like map, if you only need the first item (key), drop the second.

for key := range m {
    if key.expired() {
        delete(m, key)
    }
}
Enter fullscreen mode Exit fullscreen mode

if you only need the second item (value), use the blank identifier

sum := 0
for _, value := range array {
    sum += value
}
Enter fullscreen mode Exit fullscreen mode
  • Go has no comma operator and ++ and -- are statements not expressions.
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
    a[i], a[j] = a[j], a[i]
}
Enter fullscreen mode Exit fullscreen mode

switch

The expressions need not be constants or even integers, the cases are evaluated top to bottom until a match is found (default order doesn't matter seems. Need to check).

var t interface{}
t = functionOfSomeType()
switch t := t.(type) {
default:
    fmt.Printf("unexpected type %T\n", t)     // %T prints whatever type t has
case bool:
    fmt.Printf("boolean %t\n", t)             // t has type bool
case int:
    fmt.Printf("integer %d\n", t)             // t has type int
case *bool:
    fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool
case *int:
    fmt.Printf("pointer to integer %d\n", *t) // t has type *int
}

Enter fullscreen mode Exit fullscreen mode

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

While many AI coding tools operate as simple command-response systems, Qodo Gen 1.0 represents the next generation: autonomous, multi-step problem-solving agents that work alongside you.

Read full post

Top comments (2)

Collapse
 
kevinschweikert profile image
Kevin Schweikert

Im the Switch Syntax the Position of default doesn‘t matter

Collapse
 
jiayanguo profile image
jguo

Thanks.

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post