手记

[Go菜牛系列]25个关键字用法示例

  • var & const:声明变量(var)和常量(const)
var num int
const str string = "test"
// 批量定义变量
var (
	username string = "xiaomo"
	emails []string
)
// 批量定义常量
const (
	host = "127.0.0.1"
	port = 8080
)
  • package & import: 包与导入
// 定义包名称
package main

import (
	"fmt" // 导入fmt包
	micro "github.com/micro/go-micro" // 给包名取别名
)
  • if/else, switch/case/default/fallthrough, for/continue/break, goto等流程控制
// if-else
ok := true
if ok {

} else {

}
// for loop
for i := 0; i < 10; i++ {
	if i < 3 {
		continue
	}
	if i > 5 {
		break
	}
}
// switch-case
var i = 0
switch i {
case 0, 1:
	fmt.Println("in case 1")
    // 加fallthrough表示会继续往下匹配
    // fallthrough
case 2:
	fmt.Println("in case 2")
default:
	fmt.Println("other")
}
  • func: 定义函数和方法
// 小写开头的函数只能在包内使用
func test1() {}
// 大写开头的函数可以导出到其他包使用
func Test2() {}
// 带入参,返回值的函数
func test3(age int) int {}
// 支持多个返回值
func test4(name string, pwd string) (int ,error) {}
// 相同类型参数的省略用法
func test5(name, pwd, addr string, age int) (int, error) {}
// 可变长入参
func sum(nums ...int) {}
// sum函数调用方式:
// arr := []int{1, 2, 3}
// sum(arr...)
  • return :用于从函数返回
func test1() {
	if true {
		return
	}
}

func test2() bool {
	// ...
	return true
}
  • defer:在函数退出之前执行某段逻辑
func test(a int) {
	defer func() {
		fmt.Println(a)
	}
	a++
}
  • go : 用于并发
func test1() {}
func test2() {
	go test1() // 创建goroutine, test1和test2函数将并发执行
	// do something other
}
  • chan: 和goroutine配合使用,用于数据同步
m := make(chan int) // 无缓冲管道
n := make(chan int, 6) // 有缓冲管道
  • select: 用来监听和channel有关的IO操作
select {
case <- chan1:
// 如果成功从chan1读到数据,则进入该case处理
case chan2 <- 2:
// 如果成功向chan2写入数据,则进入该case处理
default:
// 如果上面都没有成功匹配,则进入default处理
}
  • type:用于声明自定义类型

参考如下interface/struct的用法

  • interface:用于定义接口
type Teacher interface {
    Speak() string
    Lesson() string
}
  • struct: 用于定义抽象数据类型
type Student struct {
	Level int
	Name string
}
  • map: 用于定义map类型数据
//定义一个key为string,value为int类型的map
var data1 map[string]int
// 定义一个key为string,value为任意类型的map
var data2 map[string]interface{}
  • range:迭代读取slice/map/channel类型的元素数据
// 遍历数组
arr := [3]int {1, 2, 3}
for i, n := range arr {
    fmt.Println(i, n)
}
// 遍历切片
sli := []int{2, 3, 4, 5}
for i, n := range sli {
    fmt.Println(i, n)
}
// 遍历map
m := map[string]int{"Id":1, "Count":2}
for k, v := range m {
    fmt.Println(k, v)
}
1人推荐
随时随地看视频
慕课网APP