学习Go语言从简到难(过程笔记)
块链
刺头叫你刺头。
展开
-
TCP-服务器监听
package mainimport (“fmt”“net”)func process(conn net.Conn) {//这里我们循环的接收客户端发送的数据defer conn.Close()//关闭connfor{//创建一个新的切片buf := make([]byte,1024)//conn.Read(buf)//1.等待客户端通过conn发送信息//2.如果客户...原创 2019-10-19 22:34:55 · 4680 阅读 · 0 评论 -
服务器接收客戶端消息
package mainimport (“net”“fmt”“bufio”“os”)func main(){conn,err:= net.Dial(“tcp”,“192.168.20.253:8888”)//net,标准,dial链接端口ip,conn接口if err!=nil{//如果不等于nil,那就但因,客服服务端的错误信息fmt.Println(“client dial...原创 2019-10-19 22:33:27 · 229 阅读 · 0 评论 -
網絡編程基本介紹
package main/*Golang的主要设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端程序必不可少也是最关重要的一部分。网络编程有两种:1)TCP socket编程,是网络编程的主流,之所以叫tcp socket编程,是因为底层是基于tcp/ip协议的,比如:qq聊天[示意图]2)b/s结构体的http编程,我们使用浏览器取访问服务器时,使用的就是http协议,而ht...原创 2019-10-19 22:29:25 · 166 阅读 · 0 评论 -
反射
package main/*2)使用反射的方式来获取结构体的tag标签,遍历字段的值,修改字段值,调用结构体方法(要求:通过传递地址的方式完成,在前面案例上修改即可)反射struct的核心代码tag:=typ.Elem().field(O).TagGet(“json”)fmt.Printf(“tag%\n”,tag)3)定义了两个函数test1和test2,定义一个适配器函数用作统一处...原创 2019-10-12 11:39:52 · 213 阅读 · 0 评论 -
协程求素数的思路分析
package mainimport “fmt”/*应用实例3需求:要求统计1-200000的数字中,那些事素数?这个问题再本章开篇就提出了,现在我们由goroutine和channel的只是后,就可以完成了[测试数据:80000]分析思路:传统的方法,就是使用一个循环,循环的判断各个数事不是素数[ok].使用并发/并行的方式,将统计素数的任务分配给多个(4个)goroutine取完...原创 2019-10-12 09:36:13 · 291 阅读 · 0 评论 -
管道的注意事项和细节3
package mainimport (“time”“fmt”)//3)使用select可以解决从管道取数据得阻塞问题[案例演示]//4)goroutine中使用recover,解决协程中出现panic,导致程序崩溃问题[案例演示]/*说明:如果我们起了一个协程,但是这个协亨出现了panic,如果我们没有捕获这个panic,就会造成整个程序崩溃,这时我们可以再goroutine中使...原创 2019-10-12 09:33:55 · 109 阅读 · 0 评论 -
管道的注意事项和细节
package mainimport “fmt”/*1)channel可以声明为只读,或者只写性值[案例演示]2)channel只读和只写的最佳时间案例*///func chan<-int,这样ch就只能写操作了func send(ch chan<- int,exitChan chan struct{}){for i:= 0;i<10;i++{ch<-i...原创 2019-10-12 09:31:47 · 170 阅读 · 0 评论 -
管道的注意事项与细节2
package mainimport (“fmt”“time”)/*3)使用select可以解决从管道读取数据的阻塞问题[案例演示]4)goroutine中使用recover,解决协程中出现panic,导致程序崩溃问题,[案例演示]说明:如果我们起了一个协程,但是这个协程出现了panic,如果我们没有铺货这个panic,就会造成整个程序崩溃,这时我们可以再goroutine中使用r...原创 2019-10-12 09:27:53 · 143 阅读 · 0 评论 -
goroutine.go
package mainimport (“fmt”“strconv”“time”“runtime”)/*需求:要求统计1-20000的数字中,那些事素数?分析思路:1)传统的方法,就是使用一个循环,循环的判断哥哥书是不是素数。2)使用并发或者并行的方式,将统计素数的任务分配给多个goroutine去完成,这时就会使用到goroutine代码实现:monstergorou...原创 2019-10-12 09:28:24 · 89 阅读 · 0 评论 -
获取用户终端输入
package mainimport (“fmt”)//键盘输入语句////在编程中,需要接受用户输入的数据,就可以使用键盘输入的语句来获取。//inputDemo.go//步骤//1)导入fmt包//2)调用fmt包的fmt.Scanin()或者fmt.Scanf()////案例演示//要求:可以从控制台接收用户信息,【姓名,年龄,薪水,是否通过考试】。//1)使用f...原创 2019-08-16 20:47:32 · 320 阅读 · 0 评论 -
go的基础
//要求开发一个hello.go程序,可以输出“hello. world!"package mainimport “fmt”func main(){fmt.Println(“hello world”)}//(1)go文件的后缀是.go (2)package main 表示该hello.go// 文件所在的包是main在go中,每个文件都必须归属一个包//(3)import“fmt...原创 2019-08-04 18:49:58 · 107 阅读 · 0 评论 -
go语言基础
package mainimport “fmt”//go的官方网站网址是https://golang.org/pkg//注释分为单行注释和块注释,单行注释两个斜杠//块注释为/在末尾/此为块注释//如何在官方手册学习,点击首页tour网址为golang.org编程指南//进入编程指南后进入官方网站选择简体中文//如果想了解包的函数可以点击进入packages//什么是api,api...原创 2019-08-05 23:10:03 · 129 阅读 · 0 评论 -
练习题评讲和总结
func main(){//定义便令,声明变量var i int//给i赋值i = 10//使用变量fmt.Println(“i=”, i)}//Go语言的SDK是什么?// SDK就是软件开发工具包。我们做Go开发,首先需要先安装并配置好了skd//Golang环境变量配置极其副作用//GoRoot:指定 go sdk安装目录。//path:指令sdk\bin目录:go....原创 2019-08-07 05:54:22 · 132 阅读 · 0 评论 -
变量使用注意事项
//变量表示内存中的一个存储区域//该区域有自己的名称(变量名)和类型(数据类型)//Golang变量使用的三种方式//(1)第一种,指定变量类型,声明后若不赋值,使用默认值//(2)第二种,根据值自行判定定量类型(类型推导)//(3)省略var,注意:=左侧的变量不应该是已经表明过的,否则会导致编译错误//(4)多变量生命//在编程中,有时我们需要时一次性表明多个变量,Golang...原创 2019-08-08 23:32:38 · 169 阅读 · 0 评论 -
数据类型
func main() {var price float32 = 89.12fmt.Println(“price”, price)var num1 float32 = -0.00089var num2 float64 = -7809656.09fmt.Println(“num1”, num1, “num2”, num2)//位数部分可能丢失,造成精度损失,-123.0000901va...原创 2019-08-10 22:16:13 · 73 阅读 · 0 评论 -
基础数据与字符串注意试点总共5点
//字符常量是用单引号("")括起来的单个字符。例如:var c1 byte = ‘a’ var c2 int = ‘中’var c3 byte = ‘9’//Go中允许使用转义字符“‘来将其后的字符转变为特殊字符型常量。例如;var c3 char = "\n’//"\n’表示换行符//Go语言的字符使用UTF-8编码//在Go中,字符的本质是一个证书,直接输出时,是该字符对应的UTF-8...原创 2019-08-11 15:14:02 · 186 阅读 · 0 评论 -
基本数据类型转换
package mainimport “fmt”//基本数据类型默认值//整型 0//浮点型 0//字符串“”//布尔类型 false//基本介绍//在go中。数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值,在go中,默认值又叫零值。//基本数据类型默认值如下//func main(){// var a int//0// var b float32//0// ...原创 2019-08-11 20:32:52 · 147 阅读 · 0 评论 -
指针及内存布局
package mainimport “fmt”//演示golang中的指针类型func main(){//基本数据类型在内存的布局var i int = 10//i的地址时什么,&ifmt.Println(“i的地址”,&i)//指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值比如:var ptr *int = &num//下面的var p...原创 2019-08-12 22:46:21 · 103 阅读 · 0 评论 -
值类型和引用类型
package mainimport “fmt”func main(){//基本数据类型在内存布局var i int = 10//i 的地址怎么取出来fmt.Println(“i的地址”,&i)//下面的 var ptr *int =&i//1.ptr 是一个指针变量//2.ptr 的类型 *int//3.ptr 本身的&ivar ptr *int =...原创 2019-08-14 20:35:03 · 66 阅读 · 0 评论 -
标识符的基本使用
package mainfunc main(){//Golang对各种变量、方法、函数等命名时使用的字符序列成为标识符//凡是自己可以起名字的地方都叫标识符//标识符的命名规则(记住)//1,由26个英文字母大小写组成,2数字不可以开头,3Golang中严格区分大小写,4标识符不能包含空格5,下划线“本身在Go中是一个特殊的标识符,成为空标识符。//可以代表任何其他的标识符,但是它对应...原创 2019-08-14 21:47:50 · 998 阅读 · 0 评论 -
保留关键字和预定义标识符
保留关键字介绍//系统保留关键字总共25个//break deafult func interface select//case defer go map struct//chan else goto package switch//const fallthrough if range type//continue for import r...原创 2019-08-15 08:10:12 · 670 阅读 · 0 评论 -
算术运算符
package mainimport (“fmt”)func main(){//(1)对于除号"/",他的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分,例如:x:=19/5,结果是3//(2)当对一个 数取模时,可以等价a%b=a-a/b*b:这样我们可以看到曲波的一个本质运算。//(3)Golang的自增自减只能当做一个独立语言使用时,不能这样使用b:=...原创 2019-08-15 16:38:35 · 180 阅读 · 0 评论 -
关系运算(比较运算)逻辑运算
package 比较运算和关系运算一样叫法不一样import (“fmt”)func main(){//关系运算符(比较运算符)//关系运算符的结果都是bool型,也就是要么是true,要么是false//关系表达式经常用在if结构的条件中或循环结构的条件中//关系运算符组成的表达式,我们称为关系表达式:a>b//比较运算符"“不能误写成”"/*运算符 运算 ...原创 2019-08-16 09:05:45 · 2533 阅读 · 0 评论 -
短路与和短路或
package 比较运算和关系运算一样叫法不一样import “fmt”//&&也叫短路与;如果第一个条件为false,则第二个条件不会判断,最终结果false//||也叫短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true//案例演示;func test()bool{fmt.Println(“test…”)return true}func...原创 2019-08-16 09:42:48 · 603 阅读 · 0 评论 -
赋值运算经典面试题与运算符优先级
package 赋值运算//赋值运算的案例演示//案例演示赋值运算符的基本使用。//(1)赋值基本案例//(2)有两个变量,a和b,要求将其进行交换,最终打印结果//(3)+=的使用案例//(4)案例/*赋值运算符的特点(1)运算顺序从右到左var c intc = a + 3//赋值运算的执行顺序是从右向左(2)赋值运算的左边 只能是变量右边,可以使变量、表达式、常量值/...原创 2019-08-16 16:24:38 · 1703 阅读 · 0 评论 -
其他运算符
package 赋值运算func main (){/*& 按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。运算规则是;同时为1,结果为1,否则为0| 按位或运算符“|”是双目运算符。其功能室参与运算的两数各对应的二进位相或运算规则是;有一个为1,结果为1,否则为0^ 按位异或运算符“^"是双目运算符。...原创 2019-08-16 19:38:35 · 228 阅读 · 0 评论 -
计算机进制的介绍
/*进制的图示十进制 十六进制 八进制 二进制0 0 0 01 1 1 12 2 ...原创 2019-08-16 21:34:25 · 476 阅读 · 0 评论 -
位运算深度了解
/*位运算位运算的思考题1)请看下面的代码段,回答a,b,c,d结果是多少?func main(){var a int = 1>>2var b int =-1>>2var c int =1<<2var d int =-1 <<2//a,b,c,d,结果是多少fmt.Println(“a=”,a)fmt.Println(“b=”,a...原创 2019-08-17 16:14:27 · 110 阅读 · 0 评论 -
流程控制
package mainfunc main(){/*在程序中,程序运行的流程控制决定程序时如何执行的,是我们必须掌握的,主要有三大流程控制语句。程序流程控制介绍1)顺序控制2)分支控制3)循环控制5.2顺序控制顺序控制介绍程序从上到下逐行地执行,中间没有任何判断和跳转顺序控制剧烈和注意事项Golang中定义变量时采用合法的前向引用。如:func main (){var nu...原创 2019-08-17 23:08:29 · 106 阅读 · 0 评论 -
單分支和雙分支聯係
package mainimport “fmt”func main(){var x int =4var y int =1if(x>2){if(y>2){fmt.Println(x+y)}fmt.Println(“atguigu”)}else {fmt.Println(“x is =”, x)}//輸出結果是atguigu/*單分支和雙分支練習題2)對下列代...原创 2019-08-18 09:03:51 · 120 阅读 · 0 评论 -
多分枝基本使用
package mainfunc main(){//多分枝控制//基本語法/*if 條件表達式1{執行代碼快1}else if 條件表達式2{執行代碼塊2}…else{執行代碼塊n}對上面基本語法的説明1)多分枝的判斷流程如下:(1)先判斷條件表達式1是否成立。如果為真,就執行代碼塊1(2)如果條件表達式1如果為假,就去判斷條件表達式2是否成立,如果條件表達式2為真...原创 2019-08-18 10:27:33 · 249 阅读 · 0 评论 -
多分枝使用
package mainimport (“fmt”)func main() {var b bool = trueif b == false { //如果寫成 b = false;能編譯通過嗎?如果能,結果是?fmt.Println(“a”)} else if b {fmt.Println(“b”)} else if !b {fmt.Println(“c”)} else {...原创 2019-08-18 12:37:31 · 160 阅读 · 0 评论 -
嵌套分支
package mainimport “fmt”//在一個分支結構中又完整的嵌套了另一個完整的分支結構,裏面的分支結構成爲内層分支外面的分支結構稱爲外層分支。//基本語法/*if 條件表達式{if條件表達式{}else{}}説明:嵌套分支不宜過多,建議控制在3曾内。應用案例1參加百米運動會,如果用時8秒以内進入決賽,否則提示淘汰,并且根據性別提示進去男子組或女子組。【可以讓...原创 2019-08-18 17:02:44 · 1266 阅读 · 0 评论 -
switch基本使用與switch使用細節
package mainimport “fmt”func main(){//基本介紹/*switch 語句用於基於不同條件執行不同動作,每一個case分支都是唯一的,從上到下逐一測試,知道匹配爲止。匹配項後面也不需要在加break基本語法switch 表達式{case 表達式1,表達式2,...: 語句塊1case 表達式3,表達式4,...: 語句塊//這...原创 2019-08-18 21:54:45 · 449 阅读 · 0 评论 -
switch使用細節2
package mainimport “fmt”func main(){//(7)switch后也可以不帶表達式,類似多個if-else分支來使用。【案例演示】//(8)switch后也可以直接聲明/定義一個變量,分號結束,不推薦。(案例演示)//(9)switch穿透-fallthrough,如果在case語句塊后增加fallthorough,則會繼續執行下一個case,也叫switc...原创 2019-08-18 22:47:23 · 124 阅读 · 0 评论 -
switch課堂練習
package mainimport “fmt”func main() {//使用switch把小寫類型的char 型轉爲大寫(鍵盤輸入),只轉a,b,c,d,e,其他的輸出"other"//對學生成績大於60分的,輸出"合格",低於60分的,輸出"不合格",(注:輸入的成績不能大於100)//根據用戶制定月份,打印該月份所屬的季節3.4.5春季9.10.11秋季12.1.2冬季//根...原创 2019-08-18 23:57:10 · 120 阅读 · 0 评论 -
循环控制基本介绍和入门
package mainimport(“fmt”)//基本介绍/*听其名而知其意,就是让你的代码可以循环的执行。看实际需求和快速入门请大家看个案例{for Test.go}:编写一个程序,可以打印10句“你好,尚硅谷!”,请大家想想怎么做?switch和if的比较总结了什么情况下使用switch,什么情况下使用if1)如果判断的具体数值不多,而且符合整数,浮点数,字符,字...原创 2019-08-19 11:19:59 · 104 阅读 · 0 评论 -
for循环语法和执行流程
package mainimport (“fmt”)func main(){//基本语法/*for循环变量初始化;循环条件;循环变量迭代{循环操作(语句)}对上面的语法格式说明1)对for循环来说,有四个要素2)循环变量初始化3)循环条件4)循环操作(语句),有人也叫循环体。5)循环变量迭代for循环执行的顺序说明。1)执行循环变量初始化,比如i:=12)执行循...原创 2019-08-19 17:02:47 · 2745 阅读 · 0 评论 -
实现while和dowhile控制
package mainimport “fmt”//Go语言没有while和do…while语法,这一点需要同学们注意一下,如果我们需要使用类似其他语言//(比如java/C的while和do…while),可以通过for循环来实现其使用效果。/*1)for循环实现while的效果循环变量初始化for{if循环条件表达式{break//跳出for循环…}循环操作(语句)循环变...原创 2019-08-20 08:29:39 · 348 阅读 · 0 评论 -
多重循环应用案例
package mainimport “fmt”/*介绍:1)将一个循环放在另一个循环体内,就形成了嵌套循环。在外边的for称为外层循环在里面的for循环称为内层循环。【建议一般使用两层,最多不要超过3层】2)实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环的条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。3)设外层循环次...原创 2019-08-20 11:31:29 · 624 阅读 · 0 评论