モジュール 1 · レッスン 4 / 5コース内の 4/50~8 min
モジュールのレッスン (4/5)
オペレーター
Go には、予想通りの 古典的な演算子 が備わっていますが、驚くべき点はほとんどありません。
算術、比較、論理、ビット単位。三項演算子はありません
(a ? b : c)、オーバーロードなし、型間の暗黙的な変換なし。
シンプルさが特徴です。
算術
Go
a, b := 10, 3
fmt.Println(a + b) // 13
fmt.Println(a - b) // 7
fmt.Println(a * b) // 30
fmt.Println(a / b) // 3 ← divisione INTERA tra interi
fmt.Println(a % b) // 1 ← resto (modulo)インクリメントとデクリメントは式ではなくステートメントです
x++ と x-- は値を生成しません。これらは「アクション」であり何も生成しません。
もっと。 C のような y := x++ はありません。
Go
x := 5
x++ // ok: incrementa x
// y := x++ // ERRORE di compilazione
fmt.Println(x) // 6比較
== != < <= > >= は bool を返します。これらは数値と文字列に適用されます。のために
構造体のすべてのフィールドは比較可能である必要があります (内部にスライス/マップはありません)。
Go
"abc" == "abc" // true
"abc" < "abd" // true (ordine lessicografico)
3 != 4 // true論理的短絡あり
&&、||、!。左から右に短絡します: 最初の場合
オペランドは結果を決定するのに十分ですが、2 番目は偶数ではありません
評価されました。
Go
adult := age >= 18
seniorAdult := age >= 18 && age < 65ビットごと
& AND、| OR、^ XOR、<< 左シフト、>> 右シフト、&^ AND
違います (少し明らかです)。これらはフラグ、バイナリ解析、
最適化:
Go
flags := uint8(0b0000_0011)
flags |= 0b0000_0100 // imposta un bit: 0000_0111
flags &^= 0b0000_0010 // cancella un bit: 0000_0101
hasFlag := flags & 0b0000_0100 != 0 // true暗黙的な変換はありません
Go の 1 + 1.5 は コンパイルします。どちらも型なしリテラルであるためです。
ただし、var i int = 1; i + 1.5 は 違います。float64(i) + 1.5 が必要です。
Go
i := 1
f := 1.5
// i + f // ERRORE
float64(i) + f // 2.5あなたの番です
運動#go.m1.l4.e1
試行回数: 0読み込み中…
17 を 5 で割った余りを計算し、出力します。期待値: 2.
エディターを読み込み中…
ヒントを表示
モジュロ演算子は「%」です。
3 回の試行後に解決策が利用可能になります
運動#go.m1.l4.e2
試行回数: 0読み込み中…
年齢が 18 から 65 までの場合は true、それ以外の場合は false を出力します。
エディターを読み込み中…
ヒントを表示
2 つの比較を `&&` で結合します。
3 回の試行後に解決策が利用可能になります
Quiz#go.m1.l4.e3
準備完了このコードは何を出力しますか?
Go
a, b := 7, 2
fmt.Println(a/b, a%b)要約
- 古典的な算術。 int 間の
/は整数の除算 (切り捨て) です。 ++および--は式ではなくステートメントです。いいえ、y := x++は使用できません。- 比較演算子と論理演算子は
boolを生成します。&&/||ショート。 - フラグとバイナリ解析用のビット単位
& | ^ << >> &^。 - 異なる型間の暗黙的な変換はありません。
type(x)を使用してください。