字节青训营Go语言学习第一天--基础语言+实战案例
文章目录
- 走进Go语言基础语言
- 2.2基础语言-变量
- 2.3基础语法- if else
- 2.4基础语法-循环
- 基础语法-switch
- 基础语法-数组
- 基础语法-切片
- 基础语法-map
- 基础语法-range
- 基础语法-函数
- 基础语法-指针
- 基础语法-结构体
- 基础语法-结构体方法
- 基础语法-错误处理
- 基础语法-字符串操作
- 基础语法-字符串格式化
- 基础语法-JSON操作
- 基础语法-时间处理
- 基础语法-字符串和数字的转化
- 基础语法-进程信息
- 实战案例
- 猜数字游戏
- 命令行词典
- socks5代理介绍
走进Go语言基础语言
2.2基础语言-变量
golang的常量可以没有确定的类型,可以根据上下文来自动确定类型。
2.3基础语法- if else
if后面必须直接跟大括号
2.4基础语法-循环
for 里面的三段任意一段都能省略。
基础语法-switch
golang默认是不需要加break的,而且golang可以使用任意的变量类型,甚至可以取代任意if,else语句
基础语法-数组
基础语法-切片
append追加如果越界就会扩容并放回一个新的切片,因此要赋值回去,可以用copy来拷贝,还有像python一样的切片操作,不支持负数索引。
基础语法-map
在获取value时可以加个ok来获取这个map里面到底有没有这个key存在,遍历时是随机顺序。
基础语法-range
range遍历数组时会返回两个值,第一个值是索引,第二个值是值,如果不想要索引,可以用下划线去复位
基础语法-函数
golang函数可以支持返回多个值,在一般业务中,用第一个值返回真正的值,第二个值返回ok。
基础语法-指针
golang的指针主要用于传参。
基础语法-结构体
为初始化的值都是空值
基础语法-结构体方法
将(u user)提前,带指针的话就能修改结构体
基础语法-错误处理
golang异常用err如果正常的话就返回结构和nil,异常就返回nil和异常的信息,然后主函数判断异常,golang的异常感觉比java要简单很多。
基础语法-字符串操作
对于中文,一个中文对应多个字符。
基础语法-字符串格式化
基础语法-JSON操作
对于结构体我们只要保证每一个字段是大写就可以利用json.Marshal()来获得序列化后的字符串,要用string强制类型转化后的打印,我们可以定义一个变量b然后可以利用json.Unmarshal(buf,&b)反序列化到b,
如果需要小写下划线风格的json数据,那么可以在字段后面把字段名称改为小写。
基础语法-时间处理
需要格式时间的话不像java用的什么HH:mm:ss而是一个固定的时间,这个时间是写在官方文档上的。
同样可以用time.Parse来解析时间,用time.Unix()来获取一个时间戳。
基础语法-字符串和数字的转化
放在strconv包里面,参数一就是目标字段,参数个就是转化为多少进制,参数三表示是多少位的,可以用Rtoi把数字转为字符串。
基础语法-进程信息
用os.Getenv来获取环境变量,下面是设置环境变量,然后可以用exec.Command来启动进程并且获取输入输出。
实战案例
猜数字游戏
package mainimport ("bufio""fmt""math/rand""os""strconv""strings""time"
)func main() {maxNum := 100rand.Seed(time.Now().UnixNano())secretNumber := rand.Intn(maxNum)// fmt.Println("The secret number is ", secretNumber)fmt.Println("Please input your guess")reader := bufio.NewReader(os.Stdin)for {input, err := reader.ReadString('\n')if err != nil {fmt.Println("An error occured while reading input. Please try again", err)continue}input = strings.Trim(input, "\r\n")guess, err := strconv.Atoi(input)if err != nil {fmt.Println("Invalid input. Please enter an integer value")continue}fmt.Println("You guess is", guess)if guess > secretNumber {fmt.Println("Your guess is bigger than the secret number. Please try again")} else if guess < secretNumber {fmt.Println("Your guess is smaller than the secret number. Please try again")} else {fmt.Println("Correct, you Legend!")break}}
}
命令行词典
彩虹翻译链接
代码生成链接
http.NewRequest的data参数是一个流,因为放在内存里面可能会导致发送请求会有很大内存
因为resp.response也是一个流,为了避免内存泄露,因此会加上defer 来关闭这个流,这个会从函数结束之后从下往上运行。
由于data是写死的所以我们要改变一下、
这两个data有区别,因为json.Marshal得到的是一个byte数组,因此我们用btyes.NewReader
type DictResponse struct {Rc int `json:"rc"`Wiki struct {KnownInLaguages int `json:"known_in_laguages"`Description struct {Source string `json:"source"`Target interface{} `json:"target"`} `json:"description"`ID string `json:"id"`Item struct {Source string `json:"source"`Target string `json:"target"`} `json:"item"`ImageURL string `json:"image_url"`IsSubject string `json:"is_subject"`Sitelink string `json:"sitelink"`} `json:"wiki"`Dictionary struct {Prons struct {EnUs string `json:"en-us"`En string `json:"en"`} `json:"prons"`Explanations []string `json:"explanations"`Synonym []string `json:"synonym"`Antonym []string `json:"antonym"`WqxExample [][]string `json:"wqx_example"`Entry string `json:"entry"`Type string `json:"type"`Related []interface{} `json:"related"`Source string `json:"source"`} `json:"dictionary"`
}
JSOn转化
bodyText, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatal(err)}var dictResponse DictResponseerr = json.Unmarshal(bodyText, &dictResponse)if err != nil {log.Fatal(err)}fmt.Printf("%#v\n", dictResponse)
这样我们就利用json的反序列化得到了这个结构体然后打印。
打印结果
bodyText, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatal(err)}if resp.StatusCode != 200 {log.Fatal("bad StatusCode:", resp.StatusCode, "body", string(bodyText))}var dictResponse DictResponseerr = json.Unmarshal(bodyText, &dictResponse)if err != nil {log.Fatal(err)}fmt.Println(word, "UK:", dictResponse.Dictionary.Prons.En, "US:", dictResponse.Dictionary.Prons.EnUs)for _, item := range dictResponse.Dictionary.Explanations {fmt.Println(item)}
主函数
判断Args是不是两个不是就打印错误然后提取我们的word然后查询。
socks5代理介绍
首先开放一个端口,然后让这个端口去接受请求。在process方法中,bufio.NewReader返回的是一个带缓冲的流,读第一个字节的时候会可能会把后面1kb的字节都读完,如果你下次要读999个字节这样就能瞬间返回,这样效率比较高效。
使用nc命令建立Tcp连接,这个命令是linux下的命令,如果想要在windows下使用该命令,可以参考这篇文章
nc命令
看这个认证,第一阶段浏览器会给代理服务器发送一个报文,这个包括三个字段,然后我们就读出这三个字段,最后我们要返回版本号和鉴权方式.
字节青训营Go语言学习第一天--基础语言+实战案例相关推荐
- 三个小项目入门Go语言|字节青训营笔记
前言 这是青训营的第一课,今天的课程比较快速的讲解了go语言的入门,并配合三个小的项目实践梳理所学知识点,这里详细回顾一下这三个项目,结合课后作业要求做一些代码补充,并附上自己的分析,青训期间的所有课 ...
- 字节青训营第三课之高质量编程与性能调优实战的笔记和总结
这是字节青训营第三课:高质量编程与性能调优实战的笔记和总结 概要 准备 尝试使用 test 命令,编写并运行简单测试 尝试使用 -bench参数,对函数进行性能测试 推荐阅读Go代码Review建议. ...
- 字节青训营第一课之go语言入门的笔记和总结
有幸参加了字节跳动举办的青训营活动,主要是go语言的编程实践,我将会整理课程的笔记和总结,欢迎关注! 1Go语言简介 由于Go语言有语法简单.高性能等特点,因此国内外各大公司如谷歌.腾讯.字节等都在使 ...
- 字节青训营抖音APP
You just work hard, the rest is up to time GitHub地址:https://github.com/xiaodainiao/TikTokLite TikTok ...
- 第五届字节跳动青训营 前端进阶学习笔记(八)React框架入门
文章目录 前言 React 的设计思路 1.传统JavaScript更新UI的痛点 2.我们对UI代码的需求 3.组件 (1)组件定义 (2)组件设计 (3)组件结构 4.React的生命周期 Rea ...
- 字节青训营第十三课之深入浅出RPC框架的笔记与总结.md
基本概念 本地函数调用 函数调用完整过程如图,藏实际上编译器经常优化,参数和返回值少时直接将其存在寄存器,不需操作栈,直接online不需call: 将a和b的值入栈 经函数指针找到calculate ...
- 存储与数据库 | 字节青训营笔记
目录 一.存储系统 1.什么是存储系统 2.存储系统的特点 3.RAID技术 RAID出现的背景 RAID 0 RAID 1 RAID 0+1 二.数据库 1.难道数据库和存储系统不一样吗 2.数据库 ...
- 【字节青训营】微服务架构原理核心服务治理与具体实践
1.微服务架构介绍 1.1系统架构的演进历史 1.单体架构 2.垂直应用架构 按照业务线垂直划分 3.分布式架构 抽出与业务无关的公共模块 4.SOA架构 面向服务 5.微服务架构 彻底的服务化 5. ...
- 【字节青训营】Day1 HTML+CSS笔记
一.HTML HTML传达内容,而不传达样式! 1.定义 HTML 指的是超文本标记语言 (Hyper Text Markup Language),是一种用于创建网页的标准标记语言. 语义化:HTML ...
最新文章
- python123数字形式转换_【Python系统学习02】数据类型与类型转换
- 项目十大管理及5大过程组概览
- 三个值得期待的JavaScript新功能!
- java 根据类名示例化类_Java类类getProtectionDomain()方法及示例
- 华为正式发布鸿蒙多久可以用,华为正式发布鸿蒙OS,手机随时能用
- uboot主Makefile分析
- [BZOJ4873][六省联考2017]寿司餐厅(最大权闭合子图)
- DataSet 用法
- 解决向日葵解锁密码忘记的问题,HKEY_LOCAL_MACHINE\SOFTWARE \Oray\SunLogin下没有\Oray\SunLogin目录
- 人工智能挑战教师角色独特性 与教育教学融合显现独特优势
- BLE Mesh中的Sequence number和IV Index
- Redis最大内存配置
- 机器学习实战——xgboost股票close预测
- 网上报名考试管理系统-功能齐全安全稳定-简单易用-系统试用免费
- 程序复杂性度量方法-McCabe
- css字号 h5_你应该知道的CSS文字大小单位PX、EM、PT
- ibatis mysql存储过程_分步详解 如何在iBatis中调用存储过程
- 腾讯云服务器5M带宽的实际下载/上传速度是多少?
- 物联网漏洞挖掘入门--DLINK-DIR-645路由器栈溢出漏洞分析复现
- 黄金K线图经典图解之“五毛”