Go 语言入门(1) | 青训营笔记

115 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

Go 语言入门

Hello wrold

  • fmt 是一个包
  • 花括号格式严格
  • Println 函数, 打印后换行
  • Print 函数, 打印后不换行
  • 打印多个字符串, 认为是接受多个参数, 而不是做拼接字符串操作(不用 +, 用 , 隔开)

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) 返回 [0,10)[0,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 穿透, 执行下一个 casebody