Go语言学习笔记

2021-8-17更新: 本文仅作尝试,记录一些用法,不做深入探究。

自己以前经常用Python,这次通过Go还是学习到了很多知识,比如反射,socket网络编程等。

Go玩完了,接下来打算认真学习一下Java,比较还是要吃饭的嘛!

估计我100年后可能需要Go,也许会回过头来,在看看这篇博客。

基础知识

1. 变量和常量定义

var a1 int
var a2 int = 3
a3 := 3 // 更简洁的方法

// 常量A,B,C
const (
    A = iota + 1
    B
    C
)

Warning

如果定义变量不使用会编译器会拒绝编译

2. 导入和输出

import "fmt"
import (
    _ "fmt" // 匿名导入,可以不使用
)

fmt.Println("Hello World")

3. 数组和字典

var a1 [3]int           // 数组
a2 := [3]int {1,2,3} 
a3 := []int {2,3,4}     // 动态数组

// 遍历数组
for index, value := range(a3) {
    fmt.Println("index = ",index," ;value = ",value)
}

// 切片
slice1 := make([]int,3,5)  // 大小为3,容量为5的数组

// 字典知识
var m1 map[string]int      // 声明字典
m1 = make(map[string]int)  // 分配空间
m1["one"] = 1

// 其他创建方式
m2 := make(map[string]int)
m3 := map[string] string {
    "one" : "1",
    "two" : "2",
}

4. 函数

fun add(x int) int{
    return x + 1
}

fun add_point(x *int) {
    *x = *x + 1
}

5. 结构体

// 声明结构体
type Human struct {
    name string
    sex string
}

// 绑定方法 
// 方法名称: 大写为共有,小写为私有
// 绑定时:  有星为引用,无星为值传递
func (this *Human) Show() {
    fmt.Println("name = ",this.name)
    fmt.Println("sex = ",this.sex)
}

// 对象继承
type SuperMan struct {
    Human
    level int
}

h := Human{"zhangsan","male"}
h.Show()

s := SuperMan{Human{"li3","male"},88}
s.Show()

6. 接口

/*
步骤:
    1. 有一个父类接口
    2. 实现了所有方法
    3. 指向子类
*/

// 动物类接口
type Animal interface {
    Sleep()
    GetColor() string
    GetType() string
}

// Cat 对象
type Cat struct {
    color string
}
func (this *Cat) Sleep() {
    fmt.Println("Cat is sleep")
}
func (this *Cat) GetColor() string{
    return this.color
}
func (this *Cat) GetType() string{
    return "Cat"
}

7. 反射简单类型

import "reflect"

var num2 int32 = 12
reflect.TypeOf(num2)
reflect.ValueOfnum2)

8. 并发

// go 关键字+匿名函数 !当主程序结束会自动结束
go func() {
    ...
}()

// goroute之间进行通信
c := make(chan int)      // 不带缓冲的
c := make(chan int, 3)   // 缓冲为3

c <- 666    // 向信道发送(有阻塞特性)
num := <-c  // 从信道接受
close(c)    // 关闭信道

// 多信道选择,收到任意一个就执行
select {
case c <- x1:
    fmt.Println("x1")
case c <- x2:
    fmt.Println("x2")
}

9. 更换镜像

go env -w GO111MODULE=on

// 七牛云
go env -w GOPROXY=https://goproxy.cn,direct

// 阿里源
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

10. go module用法

go mod init gin
go get github.com/gin-gonic/gin

相关学习视频

Thecw第一集

Thecw第二集

8小时讲解