摘要:
1、Go代码: package main /* #include <stdio.h> typedef void (*callback)(int); static void funcs(callback c1,callback c2,int p1,int p2) { c1(p1); c2(p2); } 阅读全文
posted @ 2022-05-10 15:14
思念以南
阅读(172)
评论(0)
推荐(0)
摘要:
1、Python代码 from ctypes import * import time if __name__ == '__main__': startTime = time.time() s = CDLL("s1.so") # 加载s1.so文件 result = s.run(100000000) 阅读全文
posted @ 2022-05-10 15:13
思念以南
阅读(305)
评论(0)
推荐(0)
摘要:
如果需要把Go编译为32位的DLL给其他的语言调用(易语言): 流程如下: 1、下载32位的GCC编译器 i686-w64-mingw32-gcc-4.7.4-release-win64_rubenvb.7z 2、设置环境变量 set CGO_ENABLED=1 set CC=mingw32\bin 阅读全文
posted @ 2022-05-10 15:12
思念以南
阅读(1953)
评论(0)
推荐(0)
摘要:
作者:panhuili,腾讯 IEG 后台开发工程师 一、CGO 快速入门 1.1、启用 CGO 特性 在 golang 代码中加入 import “C” 语句就可以启动 CGO 特性。这样在进行 go build 命令时,就会在编译和连接阶段启动 gcc 编译器。 // go.1.15// tes 阅读全文
posted @ 2022-05-10 15:11
思念以南
阅读(725)
评论(0)
推荐(0)
摘要:
1、Go语言调用dll user32 := syscall.NewLazyDLL("imobiledevice.dll") MessageBoxW := user32.NewProc("idevice_event_subscribe") MessageBoxW.Call(uintptr(C.test 阅读全文
posted @ 2022-05-10 15:11
思念以南
阅读(2949)
评论(0)
推荐(0)
摘要:
package main /* #include <stdio.h> //void TestArray(char* s[],int sLen); static void DDD(char* s[],int sLen){ printf(s[sLen-1]); //TestArray(s,sLen); 阅读全文
posted @ 2022-05-10 15:10
思念以南
阅读(474)
评论(0)
推荐(0)
摘要:
Cgo总结(一) 这篇文章的目的: 探究c的基本类型到go类型的转换怎样才能安全;下面是根据之间的转换做的测试 结论是: 坑真多,自己要小心点;运行速度还慢,能不用就尽量不用! 测试内容如下: 1、基本转换 C类型 调用方法 Go类型 字节数(byte) 数值范围 char C.char byte 阅读全文
posted @ 2022-05-10 15:09
思念以南
阅读(828)
评论(0)
推荐(0)
摘要:
教程:http://www.topgoer.cn/docs/cgo/cgo-1d2r00032319l 1、概念解释 Cgo是Go语言提供的一个工具,它本身是一个可执行文件,当我们调用go build指令编译项目的时候,Cgo会在需要处理C代码的时候被自动使用 Cgo依赖Gcc工作 Cgo本身可以被 阅读全文
posted @ 2022-05-10 15:07
思念以南
阅读(1551)
评论(0)
推荐(0)
摘要:
Cgo编程中,在如下形式中,如果有Go函数需要导出(//export 函数名),则必须要添加在C函数前面添加static 1、传递字符串参数 package main /* typedef char* (*intFunc) (char *x); char* bridge_int_func(intFu 阅读全文
posted @ 2022-05-10 15:07
思念以南
阅读(65)
评论(0)
推荐(0)
摘要:
GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Co 阅读全文
posted @ 2022-05-10 15:05
思念以南
阅读(283)
评论(0)
推荐(0)
摘要:
实现 sort 包的Interface接口,就可以快速排序。 接口的妙用 package main import ( "fmt" "math/rand" "sort" ) type Hero struct { Name string Age int } type HeroSlice []Hero f 阅读全文
posted @ 2022-05-10 15:03
思念以南
阅读(33)
评论(0)
推荐(0)
摘要:
一、接口型函数 1.原始接口实现 type Handler interface { Do(k, v interface{}) } func Each(m map[interface{}]interface{}, h Handler) { if m != nil && len(m) > 0 { for 阅读全文
posted @ 2022-05-10 15:02
思念以南
阅读(194)
评论(0)
推荐(0)
摘要:
Golang 提供了 unsafe 包,让我们能够直接操作指定内存地址的内存。 通过 unsafe.Pointer() 函数,我们能够获取变量的内存地址表示,本质上这是个整数。可以将任意变量的地址转换成 Pointer 类型,也可以将 Pointer 类型转换成任意的指针类型,它是不同指针类型之间互 阅读全文
posted @ 2022-05-10 14:59
思念以南
阅读(187)
评论(0)
推荐(0)
摘要:
1、远程连接 shell SSH(Secure Shell)协议在远程登录时比较常用,但是除此之外还有一些其它的功能也很好用,比如端口映射,X11转发,sftp文件传输等。 以下三篇文章将介绍golang版SSH的远程登录功能,端口映射功能及sftp文件传输功能。X11包含GUI的一些操作,没有找到 阅读全文
posted @ 2022-05-10 14:54
思念以南
阅读(411)
评论(0)
推荐(0)
摘要:
01 试用 go embed 通过几个示例快速了解 go embed 的用法。 注意,代码中的 //go embed 是指令,而不是注释。 01 试用 go embed 例 1:内嵌文件 — Web 应用 基于 Echo 框架: package main import ( _ "embed" "ne 阅读全文
posted @ 2022-05-10 14:49
思念以南
阅读(2942)
评论(0)
推荐(0)
摘要:
被测试端 package main import ( "bufio" "fmt" "os" ) func main() { input := bufio.NewScanner(os.Stdin) fmt.Println("999") for input.Scan() { line := input. 阅读全文
posted @ 2022-05-10 14:48
思念以南
阅读(291)
评论(0)
推荐(0)
摘要:
在用exec包调用的其他进程后如何关闭结束,可以使用context包的机制进行管理,context包的使用详见:https://godoc.org/context exec.CommandContext方发实现了context,通过context可以对exec启动的进程结束。 隐藏程序自身黑窗口的方 阅读全文
posted @ 2022-05-10 14:46
思念以南
阅读(89)
评论(0)
推荐(0)
摘要:
func RunCMD() { cmd0 := exec.Command("tasklist") stdout0 , err := cmd0.StdoutPipe() // 获取命令输出内容 if err != nil { fmt.Println(err) return } if err := cm 阅读全文
posted @ 2022-05-10 14:45
思念以南
阅读(1859)
评论(0)
推荐(0)
摘要:
一、判断文件或文件夹是否存在 golang 判断文件或者文件夹是否存在可以通过os.stat() 方法和os.IsExist() 方法来判断: func isExist(path string)(bool){ _, err := os.Stat(path) if err != nil{ if os. 阅读全文
posted @ 2022-05-10 14:38
思念以南
阅读(2482)
评论(0)
推荐(0)
摘要:
Go 文件 读写 总结: 写的话用 bufio.NewWriter() wirter.WriteString() 可扩展性更强 附 如果用户输绝对路径,就输入绝对路径,输入相对路径就拼成绝对路径 fullPath := path.Join(_filePath, _fileName) if !path 阅读全文
posted @ 2022-05-10 14:38
思念以南
阅读(45)
评论(0)
推荐(0)
摘要:
前言: 在go语言中 map 是很重要的数据结构。Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。问题来了,这么安逸的 数据结构,它不是协程安全的 !当多个 协程同时对一个map 进行 读写时,会抛出致命错误。总结一下 想要 做 阅读全文
posted @ 2022-05-10 14:37
思念以南
阅读(423)
评论(0)
推荐(0)
摘要:
我们通常用golang来构建高并发场景下的应用,但是由于golang内建的GC机制会影响应用的性能,为了减少GC,golang提供了对象重用的机制,也就是sync.Pool对象池。 sync.Pool是可伸缩的,并发安全的。其大小仅受限于内存的大小,可以被看作是一个存放可重用对象的值的容器。 设计的 阅读全文
posted @ 2022-05-10 14:37
思念以南
阅读(440)
评论(0)
推荐(0)
摘要:
一、创建缓冲期 bytes.buffer是一个缓冲byte类型的缓冲器 1、使用bytes.NewBuffer创建:参数是[]byte的话,缓冲器里就是这个slice的内容;如果参数是nil的话,就是创建一个空的缓冲器。 2、bytes.NewBufferString创建 3、bytes.Buffe 阅读全文
posted @ 2022-05-10 14:34
思念以南
阅读(1120)
评论(0)
推荐(0)
摘要:
client package main import ( "fmt" "io" "net" "os" ) //发送文件到服务端 func SendFile(filePath string, fileSize int64, conn net.Conn) { f, err := os.Open(file 阅读全文
posted @ 2022-05-10 14:33
思念以南
阅读(85)
评论(0)
推荐(0)
摘要:
client package main import ( "bufio" "fmt" "net" "os" "strings" ) func main() { conn, err := net.Dial("tcp", "127.0.0.1:8888") if err != nil { fmt.Pri 阅读全文
posted @ 2022-05-10 14:33
思念以南
阅读(16)
评论(0)
推荐(0)
摘要:
package main import ( "archive/zip" "io" "os" "path/filepath" ) func main() { Zip(`winssh`,`winssh.zip`) Unzip(`winssh.zip`,`data`) } //压缩文件 // srcFil 阅读全文
posted @ 2022-05-10 14:32
思念以南
阅读(69)
评论(0)
推荐(0)
摘要:
package binance import ( "fmt" "github.com/gorilla/websocket" "log" "net/url" ) type websocketClientManager struct { conn *websocket.Conn addr *string 阅读全文
posted @ 2022-05-10 14:32
思念以南
阅读(208)
评论(0)
推荐(0)
摘要:
getwd,_ := os.Getwd() path := os.Getenv(`path`) os.Setenv(`path`,path + `;` + getwd) 阅读全文
posted @ 2022-05-10 14:31
思念以南
阅读(202)
评论(0)
推荐(0)
摘要:
生成RSA证书:# openssl方式生成# 生成私钥 openssl genrsa -out rsa_private_key.pem 1024 生成公钥 openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem Go代码 阅读全文
posted @ 2022-05-10 14:30
思念以南
阅读(187)
评论(0)
推荐(0)
摘要:
编码 package main import ( "math/big" "fmt" ) //切片存储base58字母 var b58Alphabet = []byte("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz") func 阅读全文
posted @ 2022-05-10 14:29
思念以南
阅读(322)
评论(0)
推荐(0)
摘要:
package main import ( "encoding/base64" "fmt" ) func main() { str := "Man" fmt.Println("原字符串是:", str) enStr := Base64EncodeString(str) fmt.Println("编码 阅读全文
posted @ 2022-05-10 14:29
思念以南
阅读(468)
评论(0)
推荐(0)
摘要:
原子函数和互斥锁,都可以保证共享数据的读写,但是呢,它们还是有点复杂,而且影响性能,对此,Go又为我们提供了一种工具,这就是通道。 所以在多个goroutine并发中,我们不仅可以通过原子函数和互斥锁保证对共享资源的安全访问,消除竞争的状态,还可以通过使用通道,在多个goroutine发送和接受共享 阅读全文
posted @ 2022-05-10 14:28
思念以南
阅读(0)
评论(0)
推荐(0)
摘要:
空结构体 空结构体的宽度是0,占用了0字节的内存空间。 var s struct{} fmt.Println(unsafe.Sizeof(s)) // prints 0 由于空结构体占用0字节,那么空结构体也不需要填充字节。所以空结构体组成的组合数据类型也不会占用内存空间。 type S struc 阅读全文
posted @ 2022-05-10 14:28
思念以南
阅读(286)
评论(0)
推荐(0)
摘要:
对于Go语言(golang)的错误设计,相信很多人已经体验过了,它是通过返回值的方式,来强迫调用者对错误进行处理,要么你忽略,要么你处理(处理也可以是继续返回给调用者),对于golang这种设计方式,我们会在代码中写大量的if判断,以便做出决定。 func main() { conent,err:= 阅读全文
posted @ 2022-05-10 14:27
思念以南
阅读(48)
评论(0)
推荐(0)
摘要:
Go语言在设计的时候,为了编写方便、效率高以及降低复杂度,被设计成为一门强类型的静态语言。强类型意味着一旦定义了,它的类型就不能改变了;静态意味着类型检查在运行前就做了。 同时为了安全的考虑,Go语言是不允许两个指针类型进行转换的。 指针类型转换 我们一般使用*T作为一个指针类型,表示一个指向类型T 阅读全文
posted @ 2022-05-10 14:26
思念以南
阅读(0)
评论(0)
推荐(0)
摘要:
和Java语言一样,Go也实现运行时反射,这为我们提供一种可以在运行时操作任意类型对象的能力。比如我们可以查看一个接口变量的具体类型,看看一个结构体有多少字段,如何修改某个字段的值等等。 TypeOf和ValueOf 在Go的反射定义中,任何接口都会由两部分组成的,一个是接口的具体类型,一个是具体类 阅读全文
posted @ 2022-05-10 14:26
思念以南
阅读(167)
评论(0)
推荐(0)
摘要:
控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context,今天我就谈谈Context。 什么是WaitGroup WaitGroup以前我们在并发的时候介绍过,它是一种控制并发的方式,它的这种方式是控制多个goroutine同时完成。 func main() { var wg 阅读全文
posted @ 2022-05-10 14:24
思念以南
阅读(9)
评论(0)
推荐(0)
摘要:
输入和输出 Go Writer 和 Reader接口的设计遵循了Unix的输入和输出,一个程序的输出可以是另外一个程序的输入。他们的功能单一并且纯粹,这样就可以非常容易的编写程序代码,又可以通过组合的概念,让我们的程序做更多的事情。 比如我们在上一篇的Go log日志 http://www.flys 阅读全文
posted @ 2022-05-10 14:23
思念以南
阅读(76)
评论(0)
推荐(0)
摘要:
前面的有篇文章在讲资源竞争的时候,讲互斥锁,互斥锁的根本就是当一个goroutine访问的时候,其他goroutine都不能访问,这样肯定保证了资源的同步,避免了竞争,不过也降低了性能。 仔细剖析我们的场景,当我们读取一个数据的时候,如果这个数据永远不会被修改,那么其实是不存在资源竞争的问题的,因为 阅读全文
posted @ 2022-05-10 14:22
思念以南
阅读(0)
评论(0)
推荐(0)
摘要:
Go 可以使用 fmt.Sprintf 来格式化字符串,格式如下: fmt.Sprintf(格式化样式, 参数列表…) 格式化样式:字符串形式,格式化符号以 % 开头, %s 字符串格式,%d 十进制的整数格式。 参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。 阅读全文
posted @ 2022-05-10 14:21
思念以南
阅读(239)
评论(0)
推荐(0)
摘要:
CA 为了保证证书的可靠性和有效性,在这里可引入 CA 颁发的根证书的概念。CA就是专门用自己的私钥给别人进行签名的单位或者机构,其遵守 X.509 标准,即无论是客户端还是服务端都是使用CA来签发证书。 根证书 根证书(root certificate)是属于根证书颁发机构(CA)的公钥证书。我们 阅读全文
posted @ 2022-05-10 14:15
思念以南
阅读(0)
评论(0)
推荐(0)
摘要:
[https://blog.csdn.net/benben_2015/article/details/89643090](https://blog.csdn.net/benben_2015/article/details/89643090 "https://blog.csdn.net/benben_ 阅读全文
posted @ 2022-05-10 14:15
思念以南
阅读(56)
评论(0)
推荐(0)
摘要:
下载地址:https://studygolang.com/dl 1、下载golang的二进制作文件: wget https://studygolang.com/dl/golang/go1.17.6.linux-amd64.tar.gz 2、解压二进制文件: tar -xzvf go1.17.4.li 阅读全文
posted @ 2022-05-10 14:13
思念以南
阅读(0)
评论(0)
推荐(0)
摘要:
声明slice 声明空的slice应该使用下面的格式: 1 var t []string 而不是这种格式: 1 t := []string{} 前者声明了一个nil slice而后者是一个长度为0的非nil的slice。 关于字符串大小写 错误字符串不应该大写。 应该写成: 1 fmt.Errorf 阅读全文
posted @ 2022-05-10 14:11
思念以南
阅读(199)
评论(0)
推荐(0)
摘要:
gofmt 所有代码在发布前均使用gofmt进行修正。 Comment Sentences(注释应当是一个完整的句子) 所有的注释都应该是一个完整的句子。句子应该以主语开头,句号结尾。 这样做,能使注释在转化成godoc时有一个不错的格式。 Declaring Empty Slices(声明空数组分 阅读全文
posted @ 2022-05-10 13:58
思念以南
阅读(267)
评论(0)
推荐(0)
浙公网安备 33010602011771号