2021-8-17更新: 本文仅作尝试,记录一些用法,不做深入探究。
自己以前经常用Python,这次通过Go还是学习到了很多知识,比如反射,socket网络编程等。
Go玩完了,接下来打算认真学习一下Java,比较还是要吃饭的嘛!
估计我100年后可能需要Go,也许会回过头来,在看看这篇博客。
1
2
3
4
5
6
7
8
9
10
|
var a1 int
var a2 int = 3
a3 := 3 // 更简洁的方法
// 常量A,B,C
const (
A = iota + 1
B
C
)
|
Warning
如果定义变量不使用会编译器会拒绝编译
1
2
3
4
5
6
|
import "fmt"
import (
_ "fmt" // 匿名导入,可以不使用
)
fmt.Println("Hello World")
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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",
}
|
1
2
3
4
5
6
7
|
fun add(x int) int{
return x + 1
}
fun add_point(x *int) {
*x = *x + 1
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
// 声明结构体
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()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/*
步骤:
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"
}
|
1
2
3
4
5
|
import "reflect"
var num2 int32 = 12
reflect.TypeOf(num2)
reflect.ValueOfnum2)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
// 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")
}
|
1
2
3
4
5
6
7
|
go env -w GO111MODULE=on
// 七牛云
go env -w GOPROXY=https://goproxy.cn,direct
// 阿里源
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
|
1
2
|
go mod init gin
go get github.com/gin-gonic/gin
|
回答:更换一个镜像源即可,可以执行go env -w GOPROXY=https://goproxy.cn
命令
回答:只能手动下载啦,步骤如下
- 在gopath下的src目录下新建目录golang.org/x
- 在src/golang.org/x目录下打开cmd
- 执行命令git clone https://github.com/golang/xxx.git, xxx是你要下载的包名。比如要下载golang.org/x/text包,那么就执行git clone https://github.com/golang/text.git
回答:出现了这个问题说明,我们缺少了GCC编译器,需要重新下载,然后加入环境变量即可,我最开始参考的这个文档,但是建议选择比较高一点的版本,我开始安装的版本比较低,又报了这个错误unrecognized option '--high-entropy-va'
后来安装了MingW8.1,成功解决问题。
Thecw第一集
Thecw第二集
8小时讲解
- go get拉取太慢
- golang第三方包的引用报错
- [无法下载 golang.org/x的包]https://blog.csdn.net/puss0/article/details/89890573