Go语言从入门到实战

一、背景

新挑战:

①、多核硬件架构;

②、超大规模分布式计算集群;

③、web模式导致前所未有的开发规模和更新速度;

二、go(编译的强类型语言)简介

作为一门语言,Go 不仅定义了能做什么,还定义了不能做什么。Go 语言的语法简洁到只有几个关键字,便于记忆。 Go 语言的编译器速度非常快,有时甚至会让人感觉不到在编译。所以,Go 开发者能显著减少等 待项目构建的时间。因为 Go 语言内置并发机制,所以不用被迫使用特定的线程库,就能让软件 扩展,使用更多的资源。Go 语言的类型系统简单且高效,不需要为面向对象开发付出额外的心 智,让开发者能专注于代码复用。Go 语言还自带垃圾回收器,不需要用户自己管理内存。

1、简单:只有25个关键字;

2、高效:垃圾回收、通过指针可直接访问内存(不支持指针运算;string是值类型,其默认的初始化值为空字符串,而不是nil);

if str ==""{} //正确判断为空
if str == nil {} //错误判断为空

3、生产力:仅支持复合;

三、编写第一个go程序

查看版本:go version

1、下载喜欢的编辑器;

2、创建test.go文件;

3、应用程序入口注意事项

①、必须是main包:package main;

②、必须是main方法:func main();

③、文件名随意;

4、退出返回值:

①、Go中main函数不支持任何返回值;

②、通过os.Exit来返回状态;

5、获取命令行参数

①、main函数不支持传入参数;

②、在程序中直接通过os.Args获取命令行参数;

四、编写测试程序

1、源码文件以_test结尾:xiaoyan_test.go;

2、测试方法名以Test开头:func TestXIAO(t *testing.T){}

五、变量赋值

1、赋值可以进行自动类型推断;

2、在一个赋值语句中可以对多个变量进行同时赋值;

六、常量定义

1、快速设置连续值(定义连续常量)

2、比特位计数

https://blog.csdn.net/vigiking/article/details/91989859

7、基本的数据类型

Go语言不允隐式类型转换;别名和原有类型也不能进行隐式类型转换。

八、算数运算符

九、比较运算符

十、位运算符

十一、条件和循环

十二、数组和切片

数组(arr :=[...] int {1,5,8,7}):容量不可伸缩;对于相同维数且相同长度的数组可以比较(若元素一致就是相同的);

切片(arr :=[] int {1,5,8,7}):容量可以伸缩;不可比较;

十三、Map声明、元素访问以及遍历、Map与工厂模式

十四、字符串

rune 可以取出字符串里面的unicode

func TestConv(t *testing.T) {
	// bool转字符串
	t.Log(strconv.FormatBool(true)) //"true"
	//字符串转bool
	flag, _ := strconv.ParseBool("true")
	t.Log(flag) //true

	//'f'指打印格式以小数方式,3:指小数位数, 64:指float64处理
	t.Log(strconv.FormatFloat(2.12, 'f', 3, 64)) //2.120
	//字符串转浮点
	float, _ := strconv.ParseFloat("3.14", 64)
	t.Log(float) // 3.14

	//整数转字符串
	t.Log(strconv.Itoa(19)) //"19"
	//字符串转整型
	i, _ := strconv.Atoi("123")
	t.Log(i) //123
	//字符串转整型
	if j, err := strconv.Atoi("123"); err == nil {
		t.Log(j) //123
	}

	slice := make([]byte, 0, 1024)
	t.Log(slice) //[]
	slice = strconv.AppendBool(slice, true)
	// 10:指十进制
	slice = strconv.AppendInt(slice, 123, 10)
	slice = strconv.AppendFloat(slice, 3.14, 'f', 2, 64)
	slice = strconv.AppendQuote(slice, "hello go")
	t.Log(string(slice)) //true1233.14"hello go"
}

十五、go语言的函数

1、函数一等公民

/**
 * 计算一个函数执行的时间
 * 调用:变量名 := timeSpent(方法名)   t.Log(方法名)
 * 返回:执行的时间
 */
func timeSpent(inner func(op int) int) func(op int) int {
	return func(n int) int {
		start := time.Now()
		ret := inner(n)
		fmt.Println("time spent: ", time.Since(start).Seconds())
		return ret
	}
}

2、可变参数和defer(延迟执行函数)

(1)可变参数

(2)延迟执行函数

十六、行为的定义和实现(面向对象)

go语言也是也不是,go语言不支持继承。

(1)封装数据

结构体:

实例创建及初始化:

(2)行为

十七、go语言的相关接口

把WriteHelloWorld()方法绑定到某个结构上,使用指针的形式。

type mySelf func(item int) int

//func timeSpent(inner func(op int) int) func(op int) int {

func timeSpent(inner mySelf) mySelf {
	return func(n int) int {
		start := time.Now()
		ret := inner(n)
		fmt.Println("time spent: ", time.Since(start).Seconds())
		return ret
	}
}
func count(op int) int {
	time.Sleep(time.Second * 1)
	return op
}
func TestFunc(t *testing.T) {
	count := timeSpent(count)
	t.Log(count(11))
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值