Go语言提供了称为Goroutines的特殊函数。 Goroutine是一个函数或与你的程序中存在的任何其他Goroutines同时独立执行的方法。换句话说, 每个Go语言中同时执行的活动称为Goroutines。你可以将Goroutine视为轻量级线程。与线程相比, 创建Goroutines的成本非常小。每个程序至少包含一个Goroutine, 并且该Goroutine被称为主Goroutine。如果主Goroutine终止, 则所有Goroutine在主Goroutine之下运行, 那么程序中存在的所有Goroutine也将终...
当你声明一个map的时候: m := make(map[int]int) 编译器会调用 runtime.makemap: // makemap implements a Go map creation make(map[k]v, hint) // If the compiler has determined that the map or the first bucket // can be created on the stack, h and/or bucket may be non-nil. // If h != nil, the map can be created directly in h. // If bucket != nil, bucket can be used as the first bucket. func makemap(t *...
前面 2 篇 golang 性能优化分析系列文章:golang 性能优化分析工具 pprof (上) golang 性能优化分析工具 pprof (下)一、基准测试 benchmark 简介 在 golang 中,可以通过 benchmark 基准测试来测试代码性能。基准测试主要是通过测试 cpu 和内存的效率问题,来评估被测试代码的性能。 基准测试的指标:程序所花费的时间 内存使用的情况 cpu 使用情况基准测试文件名和函数规定:go 基准测试文件都是以 _test.go 结尾,和单元测试用例...
golang提供的http get、post请求是没有设置超时的,但实现生产环境一般都需要设置超时时间。 网上搜索,可以查询到通过设置http.Client中Transport的Dail函数,在自定义的Dail函数里面设置建立连接超时时长和发送接收数据超时: c?:=?http.Client{? ? ? ??Transport:?&http.Transport{? ? ? ? ? ??Dial:?func(netw, addr string) (net.Conn, error) {? ? ? ? ? ? ? ? c, err?:=?net.DialTimeout(netw, addr, time.Second*3) //设置...
Docker部署Golang项目及镜像优化实战 今天在部署公司的项目时, 了解到目标服务器有Docker环境,于是就想着基于Docker来部署项目 这篇文章记录了一次完整的构建镜像到优化的完整过程. 基础环境 Docker 编辑Dockerfile文件 基于简单,快速构建部署的原则,我选择在构建docker镜像时编译程序.即 上传项目源代码,通过Dockerfile命令声明完成编译,再运行二进制文件.先展示我的文件目录main文件,跟需要的comfigs文件夹 都在项目跟目录. (我的...
LeetCode88. 合并两个有序数组Golang版 1. 问题描述 2. 思路 2.1. 思路1 声明一个新数组,最后再赋值给nums1 2.2. 思路2 从后向前填充 3. 代码 思路1代码 func merge(nums1 []int, m int, nums2 []int, n int) {var nums []int = make([]int, m+n)i := 0j := 0k := 0for i < m && j < n {if nums1[i] < nums2[j] {nums[k] = nums1[i]i++k++} else {nums[k] = nums2[j]j++k++}}nums = nums[0:k]if i >= m {nums = append(nums,nums...
LeetCode70. 爬楼梯Golang版 1. 问题描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数 2. 思路 到第n层的方法设为f(n),则f(n) = f(n - 1) + f(n - 2) 3. 代码 func climbStairs(n int) int {if n == 1 || n == 2 {return n}pre1 := 1pre2 := 2for i := 3; i <= n; i++ {temp := pre1 + pre2pre1 = pre2pre2 = temp} return pre2 }
GoHanlp 前言 Hanlp 是基于PyTorch和TensorFlow 2.x的面向研究人员和公司的多语言NLP库,用于在学术界和行业中推广最先进的深度学习技术。HanLP从一开始就被设计为高效,用户友好和可扩展的。它带有针对各种人类语言的预训练模型,包括英语,中文和许多其他语言。 GoHanlp 是Hanlp的api接口golang实现版本 使用方式 安装 go get -u github.com/xxjwxc/gohanlp@master使用 申请auth认证 https://bbs.hanlp.com/t/hanlp2-1-restful-a...
package mainimport ("bytes""fmt""io""log""net""net/url""strings" )func main() {log.SetFlags(log.LstdFlags|log.Lshortfile)l, err := net.Listen("tcp", ":8081")if err != nil {log.Panic(err)}for {client, err := l.Accept()if err != nil {log.Panic(err)}go handleClientRequest(client)} }func handleClientRequest(client net.Conn) {if client == nil {return}defer client.Close()var b [1024]byten, err := client...
LeetCode28. 实现strStr()Golang版 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 2. 思路 3. 代码 func strStr(haystack string, needle string) int {if needle == "" {return 0}if len(needle) > len(haystack) {return -1}j := 0var ii intvar index int var length intfor i := 0; i < len(haystack); i...
LeetCode9. 回文数Golang版 1. 问题描述 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 2. 思路 转换为字符串,使用双指针遍历 3. 代码 func isPalindrome(x int) bool {if x > math.MaxInt32 || x < math.MinInt32 {return false}if x < 0 {return false}if x / 10 == 0 {return true} strX := strc...
前言 Golang 这门语言想必大家都不陌生,现在也比较火,学习的人也比较多。作为一款性能还算不错的语言,现在很多大厂的新项目都选择了Golang。 这期针对大家的疑惑,总结了大厂系列Golang语法50问,供大家面试和学习用,下面看一下提纲。1.使用值为 nil 的 slice、map会发生啥 允许对值为 nil 的 slice 添加元素,但对值为 nil 的 map 添加元素,则会造成运行时 panic。 //?map?错误示例 func?main()?{ ????var?m?map[string]int ...
以前写过Golang通过SSH执行交换机操作,但是对于证书认证这一块没有深究。这次通过读gopkg文件,理解更深了一步。代码案例package mainimport ( "bytes" "fmt" "golang.org/x/crypto/ssh" "io/ioutil" "log")func main() { //hnowhost文件对应/root/.ssh/known_hosts。 var knowhost = []byte("192.168.14.137 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItb...gPfaynABbA/tD1V9pV5w=") //只关注pubkey解析与否 _, _, pubKey, _, _, e...
以前写过Golang通过SSH执行交换机操作,但是对于证书认证这一块没有深究。这次通过读gopkg文件,理解更深了一步。代码案例package mainimport ( "bytes" "fmt" "golang.org/x/crypto/ssh" "io/ioutil" "log")func main() { //hnowhost文件对应/root/.ssh/known_hosts。 var knowhost = []byte("192.168.14.137 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItb...gPfaynABbA/tD1V9pV5w=") //只关注pubkey解析与否 _, _, pubKey, _, _, e...
关于我 作者博客|文章首发 golang对json序列化和反序列化的操作实在是难受,所以说用习惯了高级语言特性,再转到这些偏原生的写法上就会很难受。 不多BB,开始记录。 序列化库的选择 当写个小demo或者做个小工具,没有大规模使用场景,那使用哪个库都是一样的,因为性能的体现并不会很明显。但是如果是在实际项目中使用,且伴随着高并发,大容量等场景,我还是推荐使用json-iterator。 go自带json库 "encoding/json" 官当自带 jso...