Golang基础-2

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中关键字、运算符、运算符优先级等相关知识。

基础

1. 关键字
  • 关键字是语言约定的有特殊含义的词,又叫保留字。
  • Go语言约定的关键字有25个,去掉了一些不必要的关键字,和语言设计思想有关。
关键字描述
break用于跳出循环
default用于选择结构的默认选项(switch、select)
func用于函数定义
select控制结构,类似于用于通信的 switch 语句
case选择结构标签
chan定义channel
interface定义接口
const定义常量
continue跳过本次循环
defer延迟执行函数
go并发执行
mapmap类型
struct定义结构体
switch选择结构
if选择结构
else选择结构
goto跳转语句
package
fallthroughcase分支加上它,继续执行下一条分支语句
var定义变量
return返回
import导入包
type定义类型
range遍历slice、map等结构元素
for循环语句
2. 运算符
  • 运算符是用于执行算术和逻辑操作的符号。
  • Go语言支持多种运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、指针运算符等。
  • 算术运算符
运算符号含义
+相加
-相减
*相乘
/相除
%取余数
++自增
自减
package main

import "fmt"

func main() {
	var a int = 10
	var b int = 20
	var c float32 = 10.123
	var d float32 = 20.123
	fmt.Println("a + b = ", a+b)
	fmt.Println("c + d = ", c+d)
	fmt.Println("a - b = ", a-b)
	fmt.Println("c - d = ", c-d)
	fmt.Println("a * b = ", a*b)
	fmt.Println("c * d = ", c*d)
	fmt.Println("a / b = ", a/b)
	fmt.Println("c / d = ", c/d)
	fmt.Println("a % b = ", a%b)
	// fmt.Println("c % d = ", c%d) // 浮点类型不能使用 %
	a++ // 必须写成单独语句
	fmt.Println("a++ = ", a)
	c++
	fmt.Println("c++ = ", c)
	// ++a  // 不支持前置 ++ 操作

	b--
	fmt.Println("b-- = ", b)
	d--
	fmt.Println("d-- = ", d)
}

输出结果
a + b = 30
c + d = 30.245998
a - b = -10
c - d = -9.999999
a * b = 200
c * d = 203.70512
a / b = 0
c / d = 0.5030562
a % b = 10
a++ = 11
c++ = 11.123
b-- = 19
d-- = 19.123

  • 关系运算符
运算符号含义
==相等
!=不相等
<小于
<=小于或等于
>大于
>=大于或等于
package main

import "fmt"

func main() {
	var a int = 10
	var b int = 20
	var e int = 10
	var g int8 = 20
	var c float32 = 10.123
	var d float32 = 20.123
	var f float32 = 20.123
	var h float64 = 20.123
	fmt.Println("a == b: ", a == b)
	fmt.Println("a == e: ", a == e)

	//不允许不同类型运算,需强制转换为相同数据类型
	// fmt.Println("b == g: ", b == g)
	fmt.Println("b == g: ", int8(b) == g)

	fmt.Println("c == d: ", c == d)
	fmt.Println("d == f: ", d == f)

	//不允许不同类型运算,需强制转换为相同数据类型
	// fmt.Println("f == h: ", f == h)
	fmt.Println("f == h: ", f == float32(h))

	fmt.Println("a != b: ", a != b)
	fmt.Println("c != d: ", c != d)

	fmt.Println("a < b: ", a < b)
	fmt.Println("c < d: ", c < d)

	fmt.Println("a <= e: ", a <= e)
	fmt.Println("d <= f: ", d <= f)

	fmt.Println("a > b: ", a > b)
	fmt.Println("c > d: ", c > d)

	fmt.Println("a >= e: ", a >= e)
	fmt.Println("d >= f: ", d >= f)
}

输出结果
a == b: false
a == e: true
b == g: true
c == d: false
d == f: true
f == h: true
a != b: true
c != d: true
a < b: true
c < d: true
a <= e: true
d <= f: true
a > b: false
c > d: false
a >= e: true
d >= f: true

  • 逻辑运算符
运算符号含义
&&逻辑与(AND)
||逻辑或(OR)
!逻辑非(NOT)
package main

import "fmt"

func main() {
	var a bool = true
	var b bool = false
	var c bool = true
	var d bool = false

	fmt.Println("a && b", a && b)
	fmt.Println("a && c", a && c)
	fmt.Println("a && d", a && d)
	fmt.Println("a && b && d", a && d)

	fmt.Println("a || b", a || b)
	fmt.Println("a || c", a || c)
	fmt.Println("b || d", b || d)
	fmt.Println("a || b || d", a && d)

	fmt.Println("!(a || b)", !(a || b))
	fmt.Println("!(a || c)", !(a || c))
	fmt.Println("!(b || d)", !(b || d))
	fmt.Println("!(a || b || d)", !(a || b || d))
}

输出结果
a && b false
a && c true
a && d false
a && b && d false
a || b true
a || c true
b || d false
a || b || d false
!(a || b) false
!(a || c) false
!(b || d) true
!(a || b || d) false

  • 位运算符
运算符号含义
&按位与(AND)操作
|按位或(OR)操作
^按位异或(XOR)操作
<<按位左移操作
>>按位右移操作
package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var a int32 = 13 // 二进制赋值
	var b int32 = 18
	fmt.Println("int32 bit size: ", unsafe.Sizeof(a)*8)
	fmt.Printf("a: %#b\n", a)
	fmt.Printf("b: %#b\n", b)
	fmt.Printf("a&b: %#b\n", a&b)
	fmt.Printf("a|b: %#b\n", a|b)
	fmt.Printf("^a: %#b\n", ^a)
	fmt.Printf("^b: %#b\n", ^b)
	fmt.Printf("a<<2: %#b\n", a<<1)
	fmt.Printf("b<<2: %#b\n", b<<2)
	fmt.Printf("a>>2: %#b\n", a>>1)
	fmt.Printf("b>>2: %#b\n", b>>2)
}

输出结果
int32 bit size: 32
a: 0b1101
b: 0b10010
a&b: 0b0
a|b: 0b11111
^a: -0b1110
^b: -0b10011
a<<2: 0b11010
b<<2: 0b1001000
a>>2: 0b110
b>>2: 0b100

  • 赋值运算符
运算符号含义
=右侧的值赋给左侧
+=左侧的值与右侧的值相加,将和赋给左侧
-=左侧的值与右侧的值相减,将差赋给左侧
*=左侧的值与右侧的值相乘,将相乘结果赋给左侧
/=左侧的值与右侧的值相除,将相除结果赋给左侧
%=左侧的值与右侧的值相除取余数,将余数赋给左侧
<<=左侧的值按位左移右侧指定的位数,将结果赋给左侧
>>=左侧的值按位右移右侧指定的位数,将结果赋给左侧
&=左侧的值与右侧的值按位与,将结果赋给左侧
|=左侧的值与右侧的值按位或,将结果赋给左侧
^=左侧的值与右侧的值按位异或,将结果赋给左侧
package main

import (
	"fmt"
)

func main() {
	var a int32 = 13 // 二进制赋值
	var b int32 = 18
	var c int32 = a
	fmt.Println("c = a: ", c)
	c += b
	fmt.Println("c += b: ", c)
	c -= b
	fmt.Println("c -= b: ", c)
	c *= b
	fmt.Println("c *= b: ", c)
	c /= b
	fmt.Println("c /= b: ", c)
	c %= a
	fmt.Println("c %= a: ", c)
	c <<= 3
	fmt.Println("c <<= 3: ", c)
	c >>= 3
	fmt.Println("c >>= 3: ", c)
	c &= a
	fmt.Printf("c &= a: %#b\n", c)
	c |= b
	fmt.Printf("c |= b: %#b\n", c)
	c ^= a
	fmt.Println("c ^= a: ", c)
}

输出结果
c = a: 13
c += b: 31
c -= b: 13
c *= b: 234
c /= b: 13
c %= a: 0
c <<= 3: 0
c >>= 3: 0
c &= a: 0b0
c |= b: 0b10010
c ^= a: 31

  • 指针运算符
运算符号含义
&获取某个变量在内存中的实际地址
*声明一个指针变量
package main

import "fmt"

func main() {
	var a int = 16
	var ptr *int = &a

	fmt.Println("a: ", a)
	fmt.Println("ptr: ", *ptr)
	*ptr = 10
	fmt.Println("ptr: ", *ptr)

	// 指针不支持 ++ -- 操作
	// ptr++
}

输出结果
a: 16
ptr: 16
ptr: 10

3. 运算符优先级
  • 不同的运算符具有不同的优先级和结合性。
分类描述关联性
后缀() [] -> . ++ –左到右
一元+ - ! ~ ++ – (type)* & sizeof右到左
乘法* / %左到右
加法+ -左到右
移位<< >>左到右
关系<<= >>=左到右
相等== !=左到右
按位与&左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或||左到右
赋值= += -= *= /= %=>>= <<= &= ^==
逗号,左到右

起始

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值