Go基础知识
参考:网址
变量
// 变量相关内容
func test01() {
// 变量
var a string = "wxx" // 等价于 var a = "wxx"
fmt.Println(a)
var b, c int = 1, 2 // 等价于 var b, c = 1, 2
fmt.Println(b, c)
// 未初始化的变量
var d int
var e float64
var f bool
var g string
fmt.Printf("%v %v %v %q\n", d, e, f, g) // 0 0 false ""
// 另一种定义局部变量的方式
h := 50
fmt.Println(h)
x, y, z := 5, false, "abc"
fmt.Println(x, y, z)
// _是一个只写变量,你不能得到它的值
// 这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。
_, i := 1, 3
fmt.Println(i)
}
常量
// 常量
func test02() {
const PI = 3.14
fmt.Println(PI)
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(a)
)
fmt.Println(a, b, c)
// iota ?
}
运算符
func test03() {
fmt.Println("============算术运算符============")
var a = 21
var b = 10
var c int
c = a + b
fmt.Printf("a + b = %d\n", c)
c = a - b
fmt.Printf("a - b = %d\n", c)
c = a * b
fmt.Printf("a * b = %d\n", c)
c = a / b
fmt.Printf("a / b = %d\n", c)
c = a % b
fmt.Printf("a %% b = %d\n", c)
a++
fmt.Printf("a++ = %d\n", a)
a = 21 // 为了方便测试,a 这里重新赋值为 21
a--
fmt.Printf("a-- = %d\n", a)
fmt.Println("============关系运算符============")
a, b = 21, 10
if a == b {
fmt.Printf("a 等于 b\n")
} else {
fmt.Printf("a 不等于 b\n")
}
if a < b {
fmt.Printf("a 小于 b\n")
} else {
fmt.Printf("a 不小于 b\n")
}
if a != b {
fmt.Printf("a 不等于 b\n")
} else {
fmt.Printf("a 等于 b\n")
}
fmt.Println("============逻辑运算符============")
x, y := true, false
if x && y {
fmt.Println("条件为 true")
} else {
fmt.Println("条件为 false")
}
if x || y {
fmt.Println("条件为 true")
} else {
fmt.Println("条件为 false")
}
if !y {
fmt.Println("条件为 true")
} else {
fmt.Println("条件为 false")
}
fmt.Println("============位运算符============")
var p uint = 60 /* 60 = 0011 1100 */
var q uint = 13 /* 13 = 0000 1101 */
var r uint = 0
r = p & q
fmt.Printf("p & q = %d\n", r) // 12
r = p | q
fmt.Printf("p & q = %d\n", r) // 61
r = p ^ q
fmt.Printf("p & q = %d\n", r) // 49
r = p << 2
fmt.Printf("p << 2 = %d\n", r) // 240
r = p >> 2
fmt.Printf("p >> 2 = %d\n", r) // 15
fmt.Println("============赋值运算符============")
var s int = 21
var t int
t = s
t += s
t -= s
t *= s
t /= s
fmt.Printf("t = %d\n", t)
t = 200
t <<= 2
t >>= 2
t &= 2
t ^= 2
t |= 2
fmt.Printf("t = %d\n", t)
fmt.Println("============其他运算符============")
var d int = 4
var e int32
var f float32
var ptr *int
/* 运算符实例 */
fmt.Printf("d 变量类型为 = %T\n", d)
fmt.Printf("e 变量类型为 = %T\n", e)
fmt.Printf("f 变量类型为 = %T\n", f)
/* & 和 * 运算符实例 */
ptr = &d // 'ptr' 包含了 'd' 变量的地址
fmt.Printf("d 的值为 %d\n", d)
fmt.Printf("*ptr 为 %d\n", *ptr)
}
条件语句
func test04() {
// if
var a = 100
fmt.Printf("a 的值为 : %d\n", a)
if a < 20 {
fmt.Printf("a 小于 20\n")
} else {
fmt.Printf("a 不小于 20\n")
}
// switch
grade := "B"
var marks = 90
switch marks {
case 90:
grade = "A"
case 80:
grade = "B"
case 50, 60, 70:
grade = "C"
default:
grade = "D"
}
fmt.Printf("你的等级是 %s\n", grade)
}
循环语句
func test05() {
// 普通用法
sum := 0
for i := 0; i <= 10; i++ {
sum += i
}
fmt.Println(sum)
无限循环
//sum = 0
//for {
// sum++ // 无限循环下去
//}
//fmt.Println(sum) // 无法输出
// for-each range 循环
strs := []string{"i", "love", "you"}
for i, s := range strs {
fmt.Println(i, s)
}
nums := [6]int{1, 2, 3, 5}
for i, x := range nums {
fmt.Printf("nums[%d] = %d\n", i, x)
}
}
数组
func test06() {
// 定义数组
var a [5]float32
fmt.Println(a) // [0 0 0 0 0]
// 定义并初始化数组
var b = [5]float32{13.14, 2.0, 3.4, 7.0, 50.0}
fmt.Println(b)
c := [5]float32{13.14, 2.0, 3.4, 7.0, 50.0}
fmt.Println(c)
// 自动推断数组长度
d := [...]float32{13.14, 2.0, 3.4, 7.0, 50.0}
fmt.Println(d)
// 指定位置初始化
e := [5]float32{1: 3.14, 3: 5.21}
fmt.Println(e) // [0 3.14 0 5.21 0]
// 访问数组元素
var nums [3]int
for i := 0; i < len(nums); i++ {
nums[i] = i + 100
}
for i := 0; i < len(nums); i++ {
fmt.Printf("nums[%d] = %d\n", i, nums[i])
}
}
函数
func test07() {
res := max(100, 200) // 只有一个返回值
fmt.Printf("最大值: %d\n", res)
a, b := swap("i", "you") // 有多个返回值
fmt.Println(a, b)
}
func max(a int, b int) int {
var res int
if a > b {
res = a
} else {
res = b
}
return res
}
func swap(a, b string) (string, string) {
return b, a
}