[ GO语言基础语法 | 青训营笔记 ]

72 阅读2分钟

Day 1 Go语言基础语法

为什么选择go语言:

部署简单,性能比较好,学习成本低,内部RPC和HTTP框架的推广

go的声明:(变量类型后置)

① var 变量名 类型 = 数值

var b, c int = 1, 2

② 变量名 := 类型(值)

f := float32(e)

③const 常量 = 值(类型自动匹配)

const h = 500000000

一些基础语法

1、if else:if后面没有括号,必须后面接大括号,不能直接把if里面的语句同一行

   if 7%2 == 0 {
		fmt.Println("7 is even")
	} else {
		fmt.Println("7 is odd")
	}

2、循环:只有唯一的一种for循环,可以用break或continue来跳出或者继续循环

        for n := 0; n < 5; n++ {
		if n%2 == 0 {
			continue
		}
		fmt.Println(n)
	}

3、switch分支结构:不同于C++,go中的switch不需要break来跳出执行,功能更加强大,可以完全取代if else

	t := time.Now()
	switch {
	case t.Hour() < 12:
		fmt.Println("It's before noon")
	default:
		fmt.Println("It's after noon")
	}

4、数组:比起数组,go中使用的更多是切片

5、切片slice:make创建切片,append追加元素,拥有像Python一样的切片操作

	c := make([]string, len(s))
	copy(c, s)
	fmt.Println(c) // [a b c d e f]

	fmt.Println(s[2:5]) // [c d e]
	fmt.Println(s[:5])  // [a b c d e]
	fmt.Println(s[2:])  // [c d e f]

6、map:和C++类似,注意存储遍历是无序的

	m := map[string]string{"a": "A", "b": "B"}
	for k, v := range m {
		fmt.Println(k, v) // b 8; a A
	}

7、函数:实际业务逻辑代码里面几乎所有函数都返回两个值,第一个值是真正的返回结果,第二值是一个错误信息

8、指针:传入参数进行修改(*),调用时加&

9、结构体:可带指针

10、错误处理:单独返回值传递错误信息(return nil 和 errror)

11、字符串操作:函数很多,查询使用

12、字符串格式化:%v打印任意类型的变量,%+v打印详细结果

其实很多用法与C++类似,感悟最深的一点是,一般语言都有异常捕获和异常处理的概念,Go不同,Go在设计的时候没有异常的概念。这仿佛把缺少一个特性当成了Go的特性。但是仔细想,它是有用的。当出现错误的时候,我们没有办法确定到底是哪种错误--磁盘空间不足?IO网络问题?如果是捕获异常可能需要包含所有类型的异常。Go给出了不同的解决方案,将错误当做返回值

这不一定是最优雅的解决方案,但这是最有效的方法鼓励开发者处理错误