Today we just have the definition of a term. We’ll be building on this term in the following days.

## Primary expressions

Primary expressions are the operands for unary and binary expressions.

`PrimaryExpr = Operand | Conversion | MethodExpr | PrimaryExpr Selector | PrimaryExpr Index | PrimaryExpr Slice | PrimaryExpr TypeAssertion | PrimaryExpr Arguments . Selector = "." identifier . Index = "[" Expression [ "," ] "]" . Slice = "[" [ Expression ] ":" [ Expression ] "]" | "[" [ Expression ] ":" Expression ":" Expression "]" . TypeAssertion = "." "(" Type ")" . Arguments = "(" [ ( ExpressionList | Type [ "," ExpressionList ] ) [ "..." ] [ "," ] ] ")" .`

Recall from before that “operands denote the elementary values in an expression”. And here we’re concerned with the operands for unary and binary expressions.

What are those?

A unary expression is an expression that stands on its own. Something like a variable name, `x`

. Or maybe `-x`

, to apply the negation unary operator `-`

to `x`

.

And a binary expression doesn’t mean two expressions, though. It means an expression composed of binary operators, such as `x || y`

.

So a primary expression is an expression that can be used as either of these. The spec goes on to show some examples:

`x 2 (s + ".txt") f(3.1415, true) Point{1, 2} m["foo"] s[i : j + 1] obj.color f.p[i].x()`

Quotes from *The Go Programming Language Specification* Version of August 2, 2023