初识go(基础篇)

  上周开始学的,在b站找了两个视频,第一个实在是啰嗦。第二个太难。最后都放弃了。深刻体会到了网上资料虽多,适合自己的却也难找(学习前多花点时间筛选适合自己的资料很重要,以此为鉴)。基于此,我这份笔记大概率也难对人有帮助,所以只是作为整理自己思路的工具,以输出倒逼输入,促进学习。

资料准备:①https://tour.go-zh.org/list 

     ②雨痕的《Go语言学习笔记》,网易蜗牛读书上有,正版的,排版很舒服。

     ③谢孟军《Go Web编程》,微信读书上有。

1.学习要先快速建立一个框架,花费的时间越短越好。即要先有一棵树,然后再慢慢长叶子。

先分析go的hello,world,这个源文件名称为hello.go:

package main //声明所属包的名称,

import "fmt" //要拿水杯接到水,才能喝水,这句就是把水接到源文件这个水杯里

func main() { //func main() 函数;花括号只能写在这里,不能另起一行
	fmt.Println("Hello, World") //这里使用fmt,就是在喝水;Println即打印函数,将结果输出到控制台
}

go run  hello.go 直接运行,但本质上也编译了;

go build hello.go 编译生成可执行文件,

大概了解了一个小例子,接下来开始学习语法(因为要快速建立框架,所以go是谁什么时候在哪发明的以及环境搭建一概省略)

①注释。单行注释用//,多行注释用/*...*/

②变量。

声明,变量用var,常量用const

一、声明后不赋值,使用默认值。

var c, python, java bool //故都为false

 二、声明后赋值,即初始化

var c, python, java = true, false, "no!" //有初始值可以省略类型,类型从初始值获取  

 三、短变量,在函数内使用

k := 3 //如果变量在之前声明,则退化为赋值  

 基本是这三种形式,但是go变量可以以组方式整理

var(
    x,y int
    a,s=100,"abc"      
)  

 ③类型

Go 的基本类型有(没必要全记住,现实是开卷,能查到就行,敲的多了自然就记住了)

bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

rune // int32 的别名
    // 表示一个 Unicode 码点

float32 float64

complex64 complex128  

 ④零值,没有明确初始值的变量声明会被赋予它们零值

零值是:

  • 数值类型为 0
  • 布尔类型为 false
  • 字符串为 ""(空字符串)。

 ⑤导入,和变量一样,也可以以组的形式

import (
	"fmt"
	"math"
)

⑥函数,可以没有参数或者有多个参数,可以返回任意数量的返回值

func add(x, y int) int {
	return x + y
}

func main() {
	fmt.Println(add(42, 13))
}

 ⑦流程控制语句

for  for 是 Go 中的 “while”

func main() {
	sum := 0    //
	for i := 0; i < 10; i++ {  //初始化语句+条件表达式+后置语句,前后两个可选 省略循环条件,该循环不会结束,因此无限循环可以写得很紧凑。
		sum += i    
	}
	fmt.Println(sum)
} 

if  Go 的 if 语句与 for 循环类似

package main

import (
	"fmt"
	"math"
)

func sqrt(x float64) string {
	if x < 0 {
		return sqrt(-x) + "i"
	}
	return fmt.Sprint(math.Sqrt(x))
}

func main() {
	fmt.Println(sqrt(2), sqrt(-4))
}

switch switch 是编写一连串 if - else 语句的简便方法。它运行第一个值等于条件表达式的 case 语句。

package main

import (
	"fmt"
	"runtime"
)

func main() {
	fmt.Print("Go runs on ")
	switch os := runtime.GOOS; os {
	case "darwin":
		fmt.Println("OS X.")
	case "linux":
		fmt.Println("Linux.")
	default:
		// freebsd, openbsd,
		// plan9, windows...
		fmt.Printf("%s.\n", os)
	}

没有条件的 switch 同 switch true 一样。

defer 语句会将函数推迟到外层函数返回之后执行。推迟的函数调用会被压入一个栈中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。  

⑧ struct、slice及映射

...... 

 

 

 

 

 

2.抄代码,多敲两遍。形成肌肉记忆。

3.深入,开始学习方法接口及并发的知识。这部分下一篇再写

4.实际做几个项目,巩固提高

 

posted @ 2019-07-30 13:26  始觉春空  阅读(146)  评论(0编辑  收藏  举报