![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
gaorx1019
这个作者很懒,什么都没留下…
展开
-
对于golang,for...range的一个误解
一般情况下我们对于数组、slice、map和channel等类型可能会用到for…range进行遍历。写法通常如下。buf := []int{1,2,3}for k, v := range buf { fmt.Println(k,v)}我之前一度认为在每次循环遍历的时候都会在栈上创建k,v两个变量。以至于在代码中我更偏向于用for循环去实现一个数组的遍历。但其实并不是这样,k、v两个变量只创建一次。可以通过下面一段代码来进行验证。buf := []int{1,2,3}for k, v原创 2020-07-02 17:42:03 · 213 阅读 · 0 评论 -
ip地址转为整数
这道题主要考量了两个知识点。1)ip地址每个点分十进制数的值为0-255,转化为二进制就是 0000 0000 ~ 1111 1111。正好可以存储在一个八位的空间中,4个数正好是32位,和int32的长度是一样的。2)int32的第一位为正负位,所以取值范围是-2147483648 ~ 2147483647,不满足我们的需求,所以我们需要使用uint32来进行存储。func Ip2Num(ip string) (uint32, error) { var result uint32 var原创 2020-06-16 22:38:44 · 622 阅读 · 0 评论 -
//go:——go的一些编译指令
https://golang.org/cmd/compile/原创 2020-02-07 11:17:04 · 181 阅读 · 0 评论 -
golang切片删除元素
删除一段元素package mainimport ( "fmt" "unsafe")type sliceType struct{ pdata unsafe.Pointer len int cap int}func main() { var a []byte = []byte("helloworld\n") fmt.Println((*sliceType)(u...原创 2020-01-07 14:48:26 · 1297 阅读 · 0 评论 -
查看golang编译出的汇编代码
执行命令go tool compile -S file.go原创 2020-01-06 11:12:53 · 3964 阅读 · 0 评论 -
golang的强制类型转换
C语言的类型转换很简单,直接在变量名前加其他的类型就可以,相当于给一段数据换了一个模子进行读取,只需要注意指针对应指针,数据对应数据即可。但是golang的安全性限制了它不允许这样做。下面一段简单的代码,说明一下golang强转的方式。package mainimport ( "fmt" "unsafe")type sliceType struct{ pdata unsafe....原创 2020-01-06 10:42:16 · 3435 阅读 · 0 评论 -
gomemcache源码阅读
今天想学习一下代码是如何调用memcache的,就阅读了一下gomemcache(memcached的一个驱动库)的源码,原理还是很简单的,主要就是通过net/dial.go的方法来实现连接。使用方法import ( "github.com/bradfitz/gomemcache/memcache")func main() { mc := memcache.Ne...原创 2019-12-16 14:37:49 · 266 阅读 · 0 评论 -
golang调C的基本方法和类型转换
本文主要记录一些之前在项目中使用cgo调用C语言的方法和遇到的一些问题。在go文件中写c代码使用cgo时需要先import “C”,然后在上面的注释部分内(/…/)写C代码。其中可以通过CFLAGS和LDFLAGS来指定编译参数。如下代码。package main/*#cgo CFLAGS: -I.#cgo LDFLAGS: -L.#include <stdio.h>...原创 2019-12-11 16:54:04 · 979 阅读 · 0 评论