从其他主流语言快速入门Go

0x00 Go语言最为显著的特点

  • 无需像Python一样担忧部署环境,Go编译后相同CPU架构无缝运行。
  • 由于是编译型语言,Go的性能有质的提升。但也因为是编译型语言,报错特征不明显。
  • 内置关键字提供channel机制,这使得一句代码就能实现并发,属于天然优势。

0x01 Go安装

Downloads - The Go Programming Language

一般选择新版本即可,也就是16.x+,在低版本存在历史遗留问题vendor不建议入手。

安装完成后命令行 go version检查版本号。

0x02 Go HelloWorld

package main    // package的概念与C++命名空间相似
				// 对于程序的主入口要求package必须是main
				// 如果想要分模块,可以另外新建文件夹命名不同的package

import (        // 导入模块关键字
	"fmt"
	"time"
)

func main() {
	fmt.Println("Hello Go")         // fmt.Println输出到普通流。
	// print("Hello Go")                // 内置print函数输出到错误流,所以一般不用
	time.Sleep(1 * time.Second)        // 睡1秒,time.Second单位既不是1也不是1000,感兴趣可以输出看看具体值
}
# 直接运行go文件
go run hello.go

# 将go文件编译为可执行文件
go build hello.go

0x03 Go常用类型与变量

package main

import (
	"container/list"
	"fmt"
	"strconv"
)

func main() {
	// 变量定义方式1
	var var1 int = 3

	// 变量定义方式2
	var (
		var2 int
		var3 float32
	)

	// 变量赋值
	var1 = 5
	var2 = 3
	var3 = 2.0
	fmt.Println(var1)
	fmt.Println(var2)
	fmt.Println(var3)

	// 变量转换
	var2 = int(var3)
	fmt.Println(strconv.Itoa(100))      // 整数转字符串
	fmt.Println(strconv.Atoi("100"))    // 字符串转整数
	fmt.Println(string([]byte{97, 98, 99, 100}))    // 字节转字符串
	fmt.Println([]byte("abcd"))                     // 字符串转字节
	

	// 变量赋值形式2  :=运算符仅能用于指针类型变量初始化使用
	var5 := list.New()
	var5.PushBack("var5")
	fmt.Println(var5)
	// var5 := list.New()  比如var5已经定义后再次定义是有错误的

	// 变量赋值形式2等价写法,该写法能提前定义var6变量以便后续重复使用
	var var6 *list.List
	var6 = list.New()
	var6.PushBack("var6")
	fmt.Println(var6)

	// 创建自定义类型
	// 同变量赋值形式2,book实际上属于C++的指针类型
	book := Book{
		id: 1,
		name: "Go Travel",
		price: 32.5,
	}
	fmt.Println(book.toString())

	// 创建特殊类型
	maps := map[string]interface{}{
		"key1": "122",
		"aa3": 21,
	}
	fmt.Println(maps)

}

type Book struct {
	id      int
	name    string
	price   float32
}
// Go语言没有class关键字,对于类的概念只能先定义基础数据结构,随后使用如下的函数定义形式进行扩展
// 最终效果可以在Book指针变量book初始化后使用book.toString()调用该封装函数
func (book *Book) toString() string {
	return fmt.Sprintf("book: id:%d, name:%s, price:%f", book.id, book.name, book.price)
}

0x03 函数与流程控制

// 首字母小写仅能在本文件中调用函数
func add(a int, b int) int  {
	return a + b;
}

// 首字母大写对外提供导出,另一个模块在import本模块之后就能调用Sub函数
func Sub(a int, b int) int {
	return a - b;
}

// if else
var age int = 23
if age == 25 {
	fmt.Println("true")
} else if age < 25 {
	fmt.Println("too small")
} else {
	fmt.Println("too big")
}


maps := map[string]interface{}{
	"key1": "122",
	"aa3": 21,
}
fmt.Println(maps)

// go语言版本的while
for false {
	;
}

// 迭代集合的循环,对于List当然只有一个元素,此处maps是kv结构
for k, v := range maps {
	fmt.Println(k, v)
}

// go语言版本的for i
for i := 0; i < 10; i++ {
	fmt.Println(i)
}

0x04 使用第三方库

比如想使用这个库
https://github.com/levigross/grequests


在CMD命令行执行 go get -u github.com/levigross/grequests 即可安装到本地
C:\Users\admin\go\pkg\mod\github.com\levigross\grequests@v0.0.0-20190908174114-253788527a1a
这点形如python包安装在root\Lib\site-packages中想要复用一样

随后在需要的地方import "github.com/levigross/grequests"即可使用

posted @ 2021-10-03 11:12  DXCyber409  阅读(26)  评论(0编辑  收藏  举报