day01 go基础


设计模式、算法
设计模式之美 碰到了才有感觉 工厂模式、策略模式 设计模式 多if 问题

学习编程方法:不纠结语法,要学习技巧和讲师经验 去突破项目 重点的语法掌握即可

agenda: 今日目标:用go能够写一些简单的脚本任务 学习go必备知识 1、安装及开发环境介绍 2、变量&常量 3、整型、浮点型、布尔型、字符串、切片入门 4、数据类型的相互转换 5、指针的介绍及使用场景 大作业:开发 交互式社交机器人

运行go程序必备知识 1、环境变量 GOPATH 运行项目路径 GOROOT

2、声明一个程序入口 package main func main(){ //代码块 }

3、打印输出 fmt.Println() fmt.Printf()

变量 - 变量声明 标准格式 var 变量名 变量类型 变量声明 以关键字var开头 变量类型后置,行尾部

纠结几个事: 屏幕显示、编辑器激活、开始关闭的窗口 无用 需要在开启 需要保存的会提示保存,没提示就不需要保存、环境空调、其他。。

go变量 作用域 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函数定义中的变量称为形式参数

数据类型 整型 浮点数

短变量 Go 语言中提供了一种简短的变量声明方式 变量名:= 表达式 用来声明和初始化函数内部的局部变量,变量的类型根据表达式自动推导。 // 声明初始化一个变量 s := "hello" // 声明初始化一组同类型变量 min, max := 1, 1000 // 声明初始化一组不同类型变量 a, b, c := 1.32, true, "你好" 这种声明方式简单灵活,使用比较频繁,但也有一些需要注意的地方。 短变量声明方式只能用于函数内部局部变量,不能在函数外使用 在函数外声明变量,需要使用 var 语句。如果使用了短变量声明方式会导致编译错误。 短变量声明语句中至少要声明一个新的变量 短变量声明也可以使用函数的返回值进行声明和初始化。 重复使用短变量声明时,需要保证短变量声明语句中至少要声明一个新的变量,否则直接使用赋值语句 = 就可以了。 在不同的作用域(if,for,switch),短变量声明语句会重新声明新的变量。 在不同的作用域中,重复使用短变量声明时,如果变量名相同,会重新声明新的变量。 a2 := 300

布尔型 true false
&& 优先级 比 || 高

i := 0 if b{ i = 1 }

切片 动态扩张的数组 === Python list 定义一个元素都为整数的切片: var a = [] int{} var listB = []int{1,2,3} fmt.Println(listB[0])

字符串 字符串的值必须以双引号表示

位运算 bitmap算法

激活IDE: https://www.codepeople.cn/2019/09/04/Windows10-GO-JIHUO/ 激活码可用,已更新

配置: 名称:为本条配置信息的名称,可以自定义,也可以使用系统默认的值; Run kind:这里需要设置为“Directory”; Directory:用来设置 main 包所在的目录,不能为空; Output directory:用来设置编译后生成的可执行文件的存放目录,可以为空,为空时默认不生成可执行文件; Working directory:用来设置程序的运行目录,可以与“Directory”的设置相同,但是不能为空。

在go语言中,字符串的值必须用双引号,支持utf-8 使用中文 VS 英文的问题

\t 制表位, \n 换行符 \ 反斜杠 \" 引号 \' 单引号 \r 回车符 ·· 反引号 会被原样进行赋值和输出

字符理解 字符串中每一个元素就是字符,在遍历或者每个获取字符串元素时可以获得字符

string类 分为 uint8(byte)、rune

go有2种

  • uint8类型,也叫byte类型,代表了ASCII码一个字符 字节类型== bit 英文字母
  • rune类型,代表一个UTF-8字符,用于处理中文、日文等 == int32 中文

如何计算字符串长度 ASCII字符串长度使用len() 函数 Unicode字符串长度使用utf8.RuneCountlnString() 函数

中英文混合计算长度

如何遍历字符串

Printf Println 区别? Println :可以打印出字符串,和变量 Printf : 只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整形

GOPATH 表示当前工作目录。 GOROOT 表示 Go 开发包的安装目录。

如何获取字符串中某一段字符

golang数据结构 + 字符串处理 字符串遍历、查找

go语言字符串是不可变的

go静态语言,不能直接根据索引去取值,要通过循环去修改获取 Python 动态语言 区别: 运行机制不同,编译后运行,java /go 强制类型检查 一边运行一边编辑 弱语言 没有类型检查

并发编程 0复制 === 分析到CPU 到存储io之间的问题,记得有讲,减少了一层复制 promethus中讲的 在m3db和本地存储性能问题上,采用的新技术减少系统io 处理 项目性能瓶颈 解决架构方案 才是最有价值的地方

字符串与其他数据类型的转换 字符串 ==》整数

格式化 c 是格式化一个字符 s 是一个字符串

1、查找 2、遍历 3、查找 == 切片

动态规划 == 子问题 结合 子问题 解决更大的问题

常量 不能用短变量 恒定不变的值 const age = 18 const( age = 18 sex = "men" )

常量与变量的区别 后面不会变化

重点字符串、切片提了下 指针 变量逃逸分析 为什么关注变量逃逸? 指针不能乱用,写代码复杂逻辑会很有用

讲课风格 讲重点,平常用得到的,其他语法不讲,比如complex 类型,一般搞地理会用复数

代码好坏 1、简单问题 == 代码简单 不是用复杂代码处理简单问题 会增加算法复杂度 2、算法复杂度 for循环次数 整体运行时间指数倍增长

Python中形参 都是 引用,不是值拷贝,之前讲过形参都是引用类型

指针:指针的好处节省内存的开销 整型/str/ 形参 == 值拷贝 原值不会修改 当形参是切片或者数组(本身就是指针)== 这里使用指针就是引用。不是值拷贝

修改指针内部的值 == 引用指针的获取的值就会改变

引用类型 == 指针 修改值

默认是值拷贝 修改原值不会影响 使用指针后就变了 原值变了引用的值也会跟着改变

2021.07.05

字符串替换Python实现很简单:

b = a.replace("python","golang") print(unicode(b, encoding="utf-8")) 你说golang大法好 使用unicode函数将utf-8编码转换为unicode就可以输出中文了。

go指针: Python是引用类型 go 是值拷贝 实参传递 &指针 形参接收指针中的值 int 指针 == 内存地址 类似Python的引用类型 只是Python中没有指针的概念,默认是引用类型
如何使用指针修改值: ptr = &int 获取地址
ptr 里面的值 引用类型 == 指针 默认是值拷贝 修改原值不会影响 使用指针后就变了 原值变了引用的值也会跟着改变