Jermineの博客

Jermineの博客

书不记,熟读可记;义不精,细思可精;惟有志不立,直是无着力处。

  • 首页
  • Github
  • Go语言标准库
  • Nyx
  • 关于我

记defer中的一些坑

什么是 defer?如何理解 defer 关键字?Go 中使用 defer 的一些坑。

defer 意为延迟,在 golang 中用于延迟执行一个函数。它可以帮助我们处理容易忽略的问题,如资源释放、连接关闭等。但在实际使用过程中,有一些需要注意的地方(坑),下面我们一一道来。

2017年11月29日

Golang生成C/C++可调用的动态库.so和静态库

Golang类似于C的静态语言,效率也接近于C,如果Golang也可以导出可供C调用的库,那可以和很多高级语言say goodbye了,goodbye似乎又有点武断,但至少说,Golang可以做很多事,而且效率优于很多高级语言,这样说应该没有问题。 接下来,就从三个方面分别来介绍Golang中关于库的使用。

2017年03月29日

Golang与C互用以及调用C的so动态库和a静态库

Golang与C的关系非常密切,下面主要介绍在Golang中使用C。

Golang中嵌入C代码

 1 package main
 2 //#include <stdio.h>
 3 //#include <stdlib.h>
 4 /*
 5 void Hello(char *str) {
 6     printf("%s\n", str);
 7 }
 8 */
 9 import "C" //假设把C当成包,其实有点类似C++的名字空间
10  import "unsafe" //C指针的使用,在C代码中申请的空间,GC垃圾回收机制不会管理,所以需要自己手动free申请的空间
11  func main() {
12      s := "Hello Cgo"
13      cs := C.CString(s)
14      C.Hello(cs)
15      C.free(unsafe.Pointer(cs))
16  }

3,4行的注释也可以写/* */形式 第4行与第5行之间不能有空行,同样第9行与第10行之间也不 能有行,否则编译时cgo会报错:

2017年02月23日

Go语言静态库的编译和使用

本文主要介绍go语言静态库的编译和使用方法,以windows平台为例,linux平台步骤一样,具体环境如下:

>echo %GOPATH%
E:\share\git\go_practice\

>echo %GOROOT%
C:\Go\

>tree /F %GOPATH%\src
卷 work 的文件夹 PATH 列表
卷序列号为 0009-D8C8
E:\SHARE\GIT\GO_PRACTICE\SRC
│  main.go
│
└─demo
        demo.go

在%GOPATH%\src目录,有demo包和使用demo包的应用程序main.go,main.go代码如下:

2016年08月29日

浅谈Golang sync

尽管 Golang 推荐通过 channel 进行通信和同步,但在实际开发中 sync 包用得也非常的多。另外 sync 下还有一个 atomic 包,提供了一些底层的原子操作(这里不做介绍)。本篇文章主要介绍该包下的锁的一些概念及使用方法。

2016年07月23日

Golang Cross Compiled Config - go语言跨平台交叉编译

go在各个平台交叉编译的介绍

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。

Mac 下的交叉编译

Mac 下编译 Linux 和 Windows 64 位可执行程序

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go 
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Linux 下的交叉编译

Linux 下编译 Mac 和 Windows 64位可执行程序

2016年03月23日

标签

  • agent2
  • ai3
  • all1
  • alpine linux1
  • arm6
  • arm646
  • autossh2
  • c/c++2
  • ceph1
  • chart1
  • claude code6
  • cli1
  • code-review1
  • codex2
  • conda1
  • cross-compiling1
  • cuda4
  • cursor1
  • database1
  • debug1
  • deeplearn3
  • devops3
  • dns1
  • doas1
  • docker19
  • dotnet core1
  • editor1
  • efficiency4
  • gdb1
  • gemini cli1
  • git5
  • golang6
  • gpu1
  • harbor3
  • helm1
  • hud1
  • influxdb1
  • jenkins1
  • jermine1
  • jira2
  • k8s3
  • kubernates2
  • kubernetes3
  • kvm5
  • ldap2
  • linux32
  • linux管理1
  • markdown1
  • mcp1
  • microservice1
  • mirrors1
  • mq1
  • music1
  • nexcloud1
  • nvida-docker1
  • nvidia3
  • openclaw1
  • opencv2
  • openshift2
  • openstack1
  • ppt1
  • proot-distro1
  • python3
  • raspberry-pi7
  • rdp1
  • registry1
  • reviewboard1
  • samba1
  • server4
  • shortcut keys1
  • skill1
  • sse1
  • ssh2
  • ssh-tunnel2
  • swap1
  • tensorflow3
  • termux1
  • tools5
  • ubuntu1
  • vs-code2
  • web1
  • websocket1
  • windows4
  • wsl1
  • zsh1
  • 交叉编译1
  • 代理1
  • 关于我1
  • 协议2
  • 反向代理1
  • 反向隧道1
  • 嵌入式1
  • 开发工具2
  • 开源1
  • 故障排查1
  • 敏捷开发1
  • 武汉大学授课1
  • 端口转发1
  • 终端1
  • 编程工具1
  • 自动化1
  • 课程1
  • 跳板机1
  • 远程桌面1
  • 项目管理1

归档

标签云

agent ai all alpine linux arm arm64 autossh c/c++ ceph chart claude code cli code-review codex conda cross-compiling cuda cursor database debug deeplearn devops dns doas docker dotnet core editor efficiency gdb gemini cli git golang gpu harbor helm hud influxdb jenkins jermine jira k8s kubernates kubernetes kvm ldap linux linux管理 markdown mcp microservice mirrors mq music nexcloud nvida-docker nvidia openclaw opencv openshift openstack ppt proot-distro python raspberry-pi rdp registry reviewboard samba server shortcut keys skill sse ssh ssh-tunnel swap tensorflow termux tools ubuntu vs-code web websocket windows wsl zsh 交叉编译 代理 关于我 协议 反向代理 反向隧道 嵌入式 开发工具 开源 故障排查 敏捷开发 武汉大学授课 端口转发 终端 编程工具 自动化 课程 跳板机 远程桌面 项目管理
RSS 订阅

Powered by Jermine © 2026 Jermineの博客