走进Go语言 | 青训营笔记

72 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

Go语言快速上手 - 基础语言

一、入门

首先让我们从"Hello,World"开始,如下是Go语言版本

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello,World")
}

假定该代码写在名为start.go的文件中,那么只需要键入go run helloworld.go便可以执行输出

Hello,World

在此说明,Go同C、C++一样都是编译型语言,"go run"这个命令是编译并运行,若单单是对代码进行编译可以运行"go build"。

从上至下,我们以此来分析Go语言的语法。

package main

package名为包,即Go语言的代码通过包来进行组织与管理,这同Java中第一行的package很相似,同时往下的import语句也与Java很相似(Java选手看着眼熟),这个import导入进来的包变相当于导入了API,不同的包有不同的API可以用。如下面的fmt.Println就是调用了其中的函数。

二、程序结构

命名

Go语言中的名字必须以一个字母或者下划线开头。

声明

让我们看看今天课上的代码

var a = "initial"  
var b, c int = 1, 2 
var d = true
var e float64
g := a + "foo"
const s string = "constant"
const h = 500000000

var a = "initial" -> var 表示变量,它会自动的判断数据类型。

var b, c int = 1, 2 -> 这里对var的类型进行了具体的指定即int,同时这里是多个变量进行赋值,或者这么说指定类型为int的b,c变量被分别赋值为了 1 和 2;Java选手看了很痛苦。

var d = true -> d 会字段判断为boolean类型。

var e float64 -> float64也是一种类型,不懂。

g := a + "foo" -> 这是一种将为特殊的赋值,可以分为两步先是var g String然后是g = a + "foo"。同Java一样Go也支持字符串拼串,由于a是var类型且赋值给了一个字符串所以在此处是可以进行这个赋值的。

const s string = "constant" -> 以const打头的都是常量,这里具体指定了类型也可不指定。

条件运算符
for

看看今天的代码

package main

import "fmt"

func main() {

	i := 1
	for {
		fmt.Println("loop")
		break
	}
	for j := 7; j < 9; j++ {
		fmt.Println(j)
	}

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

在Go中for之后并不需要写一个()来框住条件表达式,同时Go中唯一的循环就是for,没有while等。 可以看到Go中是有break和continue的,同时在Go中写完一条代码是不需要用分号结尾的。

switch 和 if
	if num := 9; num < 0 {
		fmt.Println(num, "is negative")
	} else if num < 10 {
		fmt.Println(num, "has 1 digit")
	} else {
		fmt.Println(num, "has multiple digits")
	}
        
        a := 2
	switch a {
	case 1:
		fmt.Println("one")
	case 2:
		fmt.Println("two")
	default:
		fmt.Println("other")
	}

if结构很简单,这里switch结构要注意一点,以往语言中若判定了一个case没有break是不会自行弹出switch的,但是在Go语言中它会自己弹出。

数据类型
array
	var a [5]int
	a[4] = 100
        b := [5]int{1, 2, 3, 4, 5}
        var twoD [2][3]int

以上是对于array类型即数组类型的赋值方式。

slice
	s := make([]string, 3) //切片的初始化
	s[0] = "a" 
	s[1] = "b"
	s[2] = "c"
        //切片赋值的第一种方式
        s = append(s, "e", "f")
        //往切片中添加元素,由于切片的长度是可以动态变化的,所以不会报错。
        c := make([]string, len(s))
	copy(c, s)
        //切片的拷贝
        good := []string{"g", "o", "o", "d"}
        //切片的初始化

slice即切片,是Go语言中使用频率很高的一种数据类型,相较于array的特点就在于它的长度是可变的而非静态固定的。

map
	m := make(map[string]int)//初始化
	m["one"] = 1//赋值
	m["two"] = 2
        m2 := map[string]int{"one": 1, "two": 2}//初始化

大概就这些了,其他同c语言差不多。后续会补充!