这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
Go 语言入门
Hello wrold
fmt是一个包- 花括号格式严格
Println函数, 打印后换行- 打印多个字符串, 认为是接受多个参数, 而不是做拼接字符串操作(不用
+, 用,隔开)
Printf 格式化输出
package main
import "fmt"
func main() {
// 第一个参数必须是字符串, 且包含 %v 格式化动词
fmt.Printf("Today is %v.\n", "Tue")
// 可以有多个格式化动词
fmt.Printf("Today is %v, tomorrow is %v.\n", "Tue", "Wed")
}
对齐文本
- 在格式化动词里指定宽度, 就可以对齐文本.
- 例如
%4v就是向左填充到足够 4 个宽度 (包括填充的字符在内) - 正数, 向左填充空格
- 负数, 向右填充空格
常量与变量
- 先声明, 后调用
const声明常量var声明变量- 命名均使用驼峰命名规则
声明多个变量
var distance = 56000000
var speed = 100800
var (
distance = 56000000
speed = 100800
)
var distance, speed = 56000000, 100800
作用域
在被声明的 {} 内
package 作用域
在 main 函数外声明的变量
对 main package 内所有函数起作用
短声明
-
使用
var声明var count = 10
-
短声明
count := 10
-
两种方式效果相同
-
短声明语句更短, 可以在无法使用
var的地方使用-
如
for循环的初始化语句-
for count := 10; count > 10; count-- { fmt.Println(count) }
-
-
if语句中-
if num := rand.Intn(3); num == 0 { fmt.Println("num is 0") }
-
-
switch语句中-
switch num := rand.Intn(10); num { case 0: fmt.Println("is 0") case 1: fmt.Println("is 1") }
-
-
-
只能在函数内部使用短声明, 不能在
package作用域使用短声明 -
短变量声明语句中至少要声明一个新的变量
-
如果同时包含新变量和已经声明的变量
-
已经声明的变量只会被重新赋值
-
a := 100 a, b := 200, 300 // 可以编译通过, 但 a 的内存地址不变
-
-
在不同的作用域中, 重复使用短变量声明时, 如果变量名相同, 会重新声明新的变量
运算符
- 自增自减只有
var++var--, 没有++var--var - 只有短路与
&&/或||, 没有逻辑与&/或|
其他与 Java 相同
常用包与方法
随机数
math/rand包Intn- 返回一个指定范围的随机整数
rand.Intn(10)返回
字符串
strings包Contains- 判断某个字符串是否包含另外一个字符串.
string.Contains(string1, string2)返回bool,string1是否包含string2
循环和分支
循环语句
for
package main
import (
"fmt"
"time"
)
func main() {
var count = 10
for count > 0 {
fmt.Println(count)
time.Sleep(time.Second)
count--
}
fmt.Println("time off")
}
分支语句
if
不需要圆括号, 其他与 Java相同
switch
case 可以是字符串也可以是数字
-
不需要
break, 默认没有case穿透 -
使用
fallthrough关键字引发case穿透, 执行下一个case的body