Go语言入门|青训营笔记

56 阅读3分钟

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

何为Go语言

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

第一个程序hello world

package main

import (
	"fmt"
)

func main() {
	fmt.Println("hello world")
}

Go语言的基础组成有以下几个部分:

  • 包声明  
    
  • 引入包   
    
  • 函数
    
  • 变量
    
  • 语句
    
  • 注释
    

变量定义

1.         var a = "initial"
2. 
3. 	var b, c int = 1, 2
4. 
5. 	var d = true
6. 
7. 	var e float64
8. 
9. 	f := float32(e)
10. 
11. 	g := a + "foo"

最常用第九行这种类型定义

循环和判断

Go语言只有一种循环,就是for循环

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

for后面循环条件没有括号

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

和循环一样,if判断条件后面也没有括号

数组和函数

数组定义


        var a [5]int
	a[4] = 100
	fmt.Println("get:", a[2])
	fmt.Println("len:", len(a))

	b := [5]int{1, 2, 3, 4, 5}
	fmt.Println(b)

	var twoD [2][3]int

函数定义


        func add2(a, b int) int {
                return a + b
        }

        func exists(m map[string]string, k string) (v string, ok bool) {
                v, ok = m[k]
                return v, ok
        }

切片

Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

切片定义:

slice1 := make([]type, len)

切片初始化:

s :=[] int {1,2,3 } 

Map集合

定义Map

var map_variable map[key_data_type]value_data_type
map_variable := make(map[key_data_type]value_data_type)

Go错误处理

Go 语言通过内置的错误接口提供了非常简单的错误处理机制。 error类型是一个接口类型,这是它的定义

type error interface {
    Error() string
}

函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息

func Sqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("math: square root of negative number")
    }
    // 实现
}

在下面的例子中,我们在调用Sqrt的时候传递的一个负数,然后就得到了non-nil的error对象,将此对象与 nil比较,结果为true,所以fmt.Println(fmt包在处理error时会调用Error方法)被调用,以输出错误,请看下面调用的示例代码:

result, err:= Sqrt(-1)

if err != nil {
   fmt.Println(err)
}

实战项目

  1. 猜数字游戏
  2. 在线终端词典
  3. SOCKS5代理

引用

  1. 字节内部课程
  2. 菜鸟教程