Go语言学习笔记
入门一下go语言
Aaron_1997
这个作者很懒,什么都没留下…
展开
-
go网络编程——http编程
一、Web工作流程Web服务器的工作原理可以简单归纳为:1. 客户端通过TCP/IP协议与服务器建立连接2. 客户端向服务器发送HTTP协议请求包,请求服务器里的文档资源3. 服务器向客户端发送HTTP协议应答包,如果请求的资源中包含动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端4. 客户端与服务器断开TCP连接。由客户端解释HTML文档,在客户端屏幕上渲染图形效果二、HTTP协议超文本传输协议(HTTP)是互联网上应用最为原创 2021-01-06 15:29:29 · 204 阅读 · 0 评论 -
go语言网络编程——UDP编程
服务器端:package mainimport ( "fmt" "net")func main() { fmt.Println("UDP Server is listening……") listen, err := net.ListenUDP("udp", &net.UDPAddr{ IP: net.IPv4(0, 0 , 0, 0), Port: 30000, }) if err != nil { fmt.Println("listen failed, er原创 2021-01-05 20:23:33 · 396 阅读 · 0 评论 -
go语言网络编程——TCP编程
一. TCP socket编程go的TCP服务端流程分为三步:(1)监听端口(2)接收客户端请求连接,返回conn(3)创建goroutine处理请求一个实例如下:TCP服务端package mainimport ( "fmt" "net" "bufio")func process(conn net.Conn) { defer conn.Close() //关闭连接 for { reader := bufio.NewReader(conn) var原创 2021-01-05 19:47:52 · 592 阅读 · 0 评论 -
go语言函数(参数、匿名、defer、异常处理、单元测试、压力测试)
1. go中函数有以下几个特点:(1)可返回多个值,但需用括号将返回值类型括起来(2)参数个数可变,可以理解为切片,使用...表示(3)支持匿名函数和闭包(4)函数本身就是一种类型,可以赋值给变量(5)返回值可以被命名,当返回值都被命名时,return语句之后可以没有参数,比如:func calc(a, b int) (sum int, avg int) { sum = a + b avg = (a + b) / 2 return}但当代码较长时,该原创 2020-12-02 16:00:57 · 271 阅读 · 0 评论 -
go语言条件语句switch与select
一、switch语句go中switch的几种用法如下面代码示例所示:package mainimport ( "fmt")func main() { var x interface{} //用type-switch语句来判断某个interface变量中实际存储的变量类型 //写法一: switch i := x.(type) { //带初始化语句 case nil: fmt.Printf("x的类型:%T\r\n", i) case int: fmt.Print.原创 2020-11-26 17:36:55 · 1005 阅读 · 0 评论 -
golang实现简易多人聊天服务器
服务器端server.go代码如下:package mainimport ( "fmt" "net")var ConnMap map[string]*net.TCPConn //客户端IP到conn(接收连接)的映射func checkErr(err error) int { if err != nil { if err.Error() == "EOF" { //客户端自己退出了程序 fmt.Println("用户退出") return 0 } fmt.Pr原创 2020-11-19 15:14:21 · 268 阅读 · 0 评论 -
搜索
一、广度优先搜索BFS1. 二进制矩阵中的最短路径 难度:medium Leetcode题号:1091题目描述:思路:典型的BFS,每次向外扩一圈,当第一次到达目标点时即为所求的最短路径长度C++代码如下:class Solution {public: int shortestPathBinaryMatrix(vector<vector<int>>& grid) { if(grid.size() == 0 || gr...原创 2020-08-27 16:20:15 · 345 阅读 · 0 评论 -
Go语言基础语法——并发
一、goroutine使用go语句可以开启一个新的运行期线程,即goroutine,以一个不同的、新创建的goroutine来执行一个函数,同一个程序中所有的goroutine共享同一个地址空间实例如下:package main import ( "fmt" "time")func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 *原创 2020-08-27 11:02:49 · 263 阅读 · 0 评论 -
Go语言基础语法——接口和错误处理
Go语言中没有类和继承的概念。Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。一个实例如下:package main import ( "fmt")type Phone interface { call()}type NokiaPhone struct {}func (nokiaPhone NokiaPhone) call() { fmt.Print原创 2020-08-27 08:58:56 · 264 阅读 · 0 评论 -
Go语言基础语法——map
map中存的是键值对,是无序的,因为map使用哈希表实现的map声明后必须初始化,否则为nil map,不能用来存放键值对实例如下:package main import "fmt"func main() { //var countryCapitalMap map[string]string //声明集合 countryCapitalMap := make(map[string]string) //map插入key-value对,各个原创 2020-08-26 11:51:02 · 466 阅读 · 0 评论 -
Go语言基础语法——range
go语言中range关键字用于for循环中迭代数组、切片、通道(channel)或集合(map)的元素在数组和切片中它返回索引和索引对应的值,而在map中它返回一个key-value键值对实例如下:package mainimport "fmt"func main() { //使用range去求一个slice的和 nums := []int{2, 3, 4} sum := 0 for _, num := range nums原创 2020-08-26 10:41:42 · 409 阅读 · 0 评论 -
Go语言基础语法——切片
go中的切片可对标python中的切片,是对数组的抽象,可以理解为动态数组,可通过一个不指定大小的数组来声明一个切片go中切片的几种常用语法的示例程序如下:一、通过make函数定义切片及使用len()和cap()函数实例:package main import "fmt"func main() { ////通过make函数定义切片,第二、三个参数分别是切片初始长度和切片容量 var numbers = make([]int,3,5)原创 2020-08-26 10:30:13 · 355 阅读 · 0 评论 -
Go语言基础语法——变量、for循环、数组、指针
一、变量及其赋值Go语言中声明的变量必须要使用(除非使用空白标识符_)几种变量赋值方式:var a int = 1var b, str = 2, "abc" //给多个变量并行赋值,且可以通过值进行识别而省略变量类型c := 1 //使用:=赋值的前提是表达式左边必须有一个新声明的变量二、for循环三种写法package main import "fmt"func main() { //三段式循环 var sum i...原创 2020-08-26 09:34:31 · 683 阅读 · 0 评论 -
Go语言——结构体
一、定义结构体及其三种初始化示例程序:package main import "fmt"type Books struct { title string author string subject string book_id int}func main() { //创建一个新的结构体 fmt.Println(Books{"Go 语言", "www.runoob.com", "Go语言原创 2020-08-26 09:31:35 · 191 阅读 · 0 评论