go 1

讲在课前:

有方向,不要当炮灰,坑有限,

面试时,先投不大喜欢的,再投喜欢的,积累经验,

同时把会的不会的,都记下来,列出来,心里有数的踏实,然后

有计划,不要一个上午过去了,就看了些公众号,啥都没写,什么时候面试5家

sanic 自动支持高并发, 不如go,坑多,刚出的框架就这样

字节跳动,滴滴,知乎,等都是go的, 最近的公司都是 蚂蚁金服,也是,基于go的区块链

go自动支持高并发,有多少个核,自动跑满.

编译

go build hello.go --->生成编辑的exe,然后执行

go run hello.go --->直接执行

进位

...00000000001

<<1 10  = 2   
<<2 100  = 4
<<3 1000  = 8
<<4 10000  = 16
<<5 100000  = 32
<<6 1000000  = 64
<<7 10000000  = 128
<<8 100000000  = 256
<<9 1000000000  = 512
<<10 1000000000  = 1024

go 1

go语言

一、 go语言介绍

1. 认识go语言

go语言(或 Golang)是Google在 2007 年开发的一种开源编程语言,于2009年11月开源,2012年发布go稳定版

go是非常年轻的一门语言,它的主要目标是“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”

2. go的诞生

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)

l Robert:曾协助制作Java的HotSport编译器,制作了chrome浏览器的js引擎V8

l Rob:google首席科学家,与ken共事多年,创出广泛实用的UTF-8编码

l Ken:1966年加入贝尔实验室,1983年图灵奖和美国国家技术奖得主,是Unix的原创者,发明了衍生出C的B语言

3. go的优势

l 做高并发有巨大的优势

l 开发简单,开发效率堪比python

l 运行效率高,很适合用作中央服务器的系统编程语言

l 是项目转型的首选语言,很多公司在用go重构代码

l 提供了海量并行的支持,很适合处理游戏相关数据

4. 使用go的公司

Google

https://github.com/kubernetes/kubernetes

Facebook

https://github.com/facebookgo

腾讯

百度

360开源日志系统

https://github.com/Qihoo360/poseidon

字节跳动,滴滴,蚂蚁金服(区块链,链),B站(新的公司),知乎 2015年左右

5. go适合做什么

服务端开发

分布式系统

网络编程

区块链开发

内存KV数据库,例如boltDB、levelDB

云平台

二、 环境安装

1. 下载SDK

官网:https://golang.google.cn/

go中文在线文档:https://studygolang.com/pkgdoc

2. 安装和配置SDK

安装编译环境这个文件

1566201859971

windows使用.msi一键安装

3. SDK目录介绍

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg)

4. 安装开发工具

安装

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg)

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg)

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg)

打开开发工具

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg)

1、屏蔽地址:
安装完成后将0.0.0.0 account.jetbrains.com和0.0.0.0 www.jetbrains.com添加到hosts
hosts位置为C:\Windows\System32\drivers\etc\

2、激活码拷进去

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg)

为了方便,自己写同样的目录(虽然go自动给配置好了)

1566202114221

1566202076080

bin 生成exe文件 自动生成电脑可以编译的

src 代码项目

三、 第一个go程序

1. 编写go源文件

// 单行
/*
多
行
 */
// go入口程序,包名必须是main
// main 代表可以编译为二进制程序,所以必须是main
package main
// 导必须用,执行效率
import "fmt"

// 函数入口
// 左括号不能单独一行,会报错的
func main() {
	 fmt.Printf("hello world\n")
}

2. 代码分析

3. IDE编写

四、 基础语法

1. 命名

go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则

一个名字必须以一个字母或下划线开头,后面可以跟任意数量的字母、数字或下划线

go语言中有25个关键字,不能用于自定义名字

break        default          func             interface         select   case defer              go               map               struct   chan         else             goto           package           switch   const        fallthrough      if             range             type   continue     for              import         return            var

还有30多个预定义的名字,用于内建的常量、类型和函数

内建常量:  true false iota nil   
内建类型:  int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr   float32 float64 complex128   complex64 bool byte rune string error   
内建函数: make len cap new append copy close delete complex real imag       panic recover

2. 变量

l 变量声明

package main

import (
	"fmt"
	"reflect"
)
func main(){
//1. 直接声明
	var v1 int
	var v2 int
//2.一次声明多个
	var v3,v4 int
//3 . 括号
	var (
		v5 int
		v6 int
	)
	fmt.Println(v1,v2,v3,v4,v5,v6) //0 0 0 0 0 0
}

l 变量初始化

//变量初识化
func main(){
	// 1. 直接
	var v1 int = 1
	// 2. 自动推断
	var v2 int = 10
	// 声明并初始化
	v3 :=10

	fmt.Println("v3的类型是:",reflect.TypeOf(v3))   // int 查看类型
	fmt.Println("v2的类型是:",reflect.TypeOf(v2))
	fmt.Println("v1的类型是:",reflect.TypeOf(v1))
}

l 变量赋值

func main(){
	var v1 int
	v1 = 123
	// := 必须赋值,不然报错
	v2 := 10
	// 多重赋值
	var v3,v4,v5 int
	v3,v4,v5 = 1,2,34
	fmt.Println(v1,v2,v3,v4,v5)
}

l 匿名变量 _可以当作特殊的变量名

func main(){
	_, s := test()  // 相当与占位符
	i, s := test()   // .var 自动补全
	fmt.Println(s,i)
}

func test()(int,string){
	return 666,"abc"
}

3. 常量与枚举

声明常量 const

iota常量生成器

枚举类型

const filename = "abc.txt"
func main(){
	fmt.Println(filename)
}
func enums(){
	const(
		python = 0
		java = 1
		golang = 2
	)
	// 就近原则
	fmt.Println(python,java,golang)
}

func main(){
	enums4()//执行函数
}

iota用自增的写法实现如上代码

func enums2(){
	const(
		python = iota
		java
		golang
	)
	fmt.Println(python,java,golang)
}

iota 还可以参加运算

func enums3(){
	const(
		b = 1 << (10*iota)   // 0 1* 10
		kb
		gb
		tb
		pb
	)
	fmt.Println(b ,kb,gb,gb,tb,pb)  //1 1024 1048576 1048576 1073741824 1099511627776
}

4. 基本数据类型

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image025.jpg)

func enums4(){
	//2. 布尔
	var v1 bool
	v1 = true
	v2 := (1==2)//还可一直这样赋值
	fmt.Println(reflect.TypeOf(v1))
	fmt.Println(reflect.TypeOf(v2))   // bool


	//3. byte
	var ch byte
	// 赋值
	// 字符是单引号, 字符串是双引号
	// 字符是定长,字符串可变长度
	ch = 'a'
	fmt.Println(reflect.TypeOf(ch)) //uint8
	fmt.Printf("ch= %c",ch) // 以char的格式来打印  // ch= a97

	// 4 . 字符串
	var str string
	str = "abc"
	fmt.Println(str[0])   //97 当前面printf 执行的时候,println不执行怎么?

}

5. fmt包的使用

l 格式说明

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image027.jpg)

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image029.jpg)

	fmt.Printf("ch= %c",ch) // 以char的格式来打印  // ch= a97

6. 类型别名

7. 类型转换

8. 运算符

l 算术运算符

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image031.jpg)

l 关系运算符

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image033.jpg)

l 逻辑运算符(与,或,非)

![img](file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image035.jpg)

作业

1.什么是微服务

2.微服务用什么优势,go或者py去做,怎么实现

3.分布式CAP理论是什么

4.分布式数据库BASE理论是什么

posted @ 2019-08-19 16:25  learnacode  阅读(455)  评论(0编辑  收藏  举报