摘要:
go项目的部署特别简单,编写完成之后,只需要执行go build即可打包为可执行文件 注意,这个操作是不同平台不一样的 windows下打包就是exe文件,linux下打包就是二进制文件 打包命令 go build 打当前目录下的main包,注意,只能有一个main函数的包 go build xxx 阅读全文
摘要:
TCP 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议 如何保证连接可靠呢?(面试常考题) 三次握手 四次挥手 服务端 package main import ( "fmt" "io" "net" ) func 阅读全文
摘要:
类型判断 判断一个变量是否是结构体,切片,map package main import ( "fmt" "reflect" ) func refType(obj any) { typeObj := reflect.TypeOf(obj) fmt.Println(typeObj, typeObj.K 阅读全文
摘要:
Go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言的测试框架相似,可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例。通过单元测试,可以解决: 确保每个函数是可运行,并且运行结果是正确的 确保 阅读全文
摘要:
文件读取 一次性读取 byteData, _ := os.ReadFile("go_study/hello.txt") fmt.Println(string(byteData)) 获取当前go文件的路径 可以通过获取当前go文件的路径,然后用相对于当前go文件的路径去打开文件 // GetCurre 阅读全文
摘要:
从1.18版本开始,Go添加了对泛型的支持,即类型参数 泛型函数 如果我们要实现一个对int类型的求和函数 func add(a, b int) int { return a + b } 但是这样写了之后,如果参数是float类型,int32类型这些,就没办法使用了 难道要为每个类型都写一个这样的函 阅读全文
摘要:
go的异常处理可能是这门语言唯一的一个诟病了吧 由于go语言没有捕获异常的机制,导致每调一个函数都要接一下这个函数的error 网上有个梗,叫做error是go的一等公民 常见的异常处理 向上抛 将错误交给上一级处理 一般是用于框架层,有些错误框架层面不能擅做决定,将错误向上抛不失为一个好的办法 p 阅读全文
摘要:
线程安全 什么是线程安全? 现在有两个协程,同时触发,一个协程对一个全局变量进行100完成++操作,另一个对全局变量—的操作 那么,两个协程结束,最后的值应该是0才对 package main import ( "fmt" "sync" ) var num int var wait sync.Wai 阅读全文
摘要:
协程 Goroutine是Go运行时管理的轻量级线程 在go中,开启一个协程是非常简单的 package main import ( "fmt" "time" ) func sing() { fmt.Println("唱歌") time.Sleep(1 * time.Second) fmt.Prin 阅读全文
摘要:
接口是一组仅包含方法名、参数、返回值的未具体实现的方法的集合 package main import "fmt" // Animal 定义一个animal的接口,它有唱,跳,rap的方法 type Animal interface { sing() jump() rap() } // Chicken 阅读全文