Jermineの博客

Jermineの博客

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

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

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日

终端利器tmux不止完美替换nohup-&-screen等进程守护命令

“君子生非异也,善假于物也” 。–语出《荀子·劝学》

如果记得没错的话,《荀子·劝学》我们这一代高中的时候应该都读过这篇文章。原意大概是君子的资质与一般人没有什么区别,君子之所以高于一般人,是因为他能善于利用外物。对于技术人来说,好工具的选择和使用往往可以省去很多不必要的麻烦,好的开源工具很多,看你如何去使用。对于终端复用工具这里推荐使用tmux,当然此类工具比较好的还有screen,不过相对screen 这里我更倾向于推荐tmux[强悍的分屏等]。

2017年01月31日

Vs Code Hotkeys - vscode: Visual Studio Code 常用快捷键

灵活使用快捷键可以提高编程效率,在此特意记录,快捷键的整理参照了VS Code官网。

主命令框

F1 或 Ctrl+Shift+P: 打开命令面板。在打开的输入框内,可以输入任何命令,例如:

2017年01月18日

Centos7.4升级内核到4

查看内核版本:uname -r

[root@k8s-node02 ~]# uname -r
3.10.0-862.9.1.el7.x86_64
[root@k8s-node02 ~]# 

内核版本为3.10.0

导入elrepo的key,然后安装elrepo的yum源


rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

使用以下命令列出可用的内核相关包

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
[root@localhost ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo-kernel: hkg.mirror.rackspace.com
Available Packages
kernel-lt.x86_64                                                  4.4.166-1.el7.elrepo                                 elrepo-kernel
kernel-lt-devel.x86_64                                            4.4.166-1.el7.elrepo                                 elrepo-kernel
kernel-lt-doc.noarch                                              4.4.166-1.el7.elrepo                                 elrepo-kernel
kernel-lt-headers.x86_64                                          4.4.166-1.el7.elrepo                                 elrepo-kernel
kernel-lt-tools.x86_64                                            4.4.166-1.el7.elrepo                                 elrepo-kernel
kernel-lt-tools-libs.x86_64                                       4.4.166-1.el7.elrepo                                 elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                                 4.4.166-1.el7.elrepo                                 elrepo-kernel
kernel-ml-doc.noarch                                              4.19.8-1.el7.elrepo                                  elrepo-kernel
kernel-ml-headers.x86_64                                          4.19.8-1.el7.elrepo                                  elrepo-kernel
kernel-ml-tools.x86_64                                            4.19.8-1.el7.elrepo                                  elrepo-kernel
kernel-ml-tools-libs.x86_64                                       4.19.8-1.el7.elrepo                                  elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                                 4.19.8-1.el7.elrepo                                  elrepo-kernel
perf.x86_64                                                       4.19.8-1.el7.elrepo                                  elrepo-kernel
python-perf.x86_64                                                4.19.8-1.el7.elrepo                                  elrepo-kernel
[root@localhost ~]# 

可以看出,长期维护版本lt为4.4,最新主线稳定版ml为4.19,我们需要安装最新的主线稳定内核,使用如下命令:

2016年12月12日

SSE技术详解 使用http将服务端数据推送到客户端 [可作为Websocket的轻量化替换]

SSE技术详解-使用http将服务端数据推送到客户端

SSE ( Server-sent Events )是 WebSocket 的一种轻量代替方案,使用 HTTP 协议。

  严格地说,HTTP 协议是没有办法做服务器推送的,但是当服务器向客户端声明接下来要发送流信息时,客户端就会保持连接打开,SSE 使用的就是这种原理。

2016年11月21日

Git clone直接提交用户名和密码

git使用用户名密码clone的方式:

git clone http://username:password@remote

例如:我的用户名是abc@qq.com,密码是abc123456,git地址为git@xxx.com/www.git

git clone http://abc@qq.com:abc123456@git.xxx.com/www.git

执行报错:

fatal: unable to access 'http://abc@qq.com:abc123456@git.xxx.com/www.git/': 
 Couldn't resolve host 'qq.com:abc123456@git.xxx.com'

报错原因是因为用户名包含了@符号,所以需求要把@转码一下

2016年08月30日

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日

解决树莓派交换空间的问题

今天在树莓派编译一个较大的C项目时发现每次编译到43之后速度会特别慢并且死机,百度之后发现可能是交换空间不足,增加1G交换空间后才解决死机问题。

2016年08月21日

浅谈Golang sync

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

2016年07月23日

Make an Alpine Docker Image

步骤:

运行如下代码获取基础镜像

docker pull jermine/alpine

Dockerfile 源码参考:https://github.com/JermineHu/docker-alpine-armhf

基于基础镜像可以安装alpine是所有软件,然后构建一个运行环境,比如

2016年05月21日
  • ««
  • «
  • 5
  • 6
  • 7
  • 8
  • 9
  • »
  • »»

标签

  • agent3
  • ai4
  • ai agent1
  • aider1
  • ai编程1
  • all1
  • alpine linux1
  • arm6
  • arm646
  • autossh2
  • c/c++2
  • ceph1
  • chart1
  • claude code7
  • cli1
  • cloudflare1
  • code-review1
  • codex2
  • conda1
  • cross-compiling1
  • cuda4
  • cursor2
  • database1
  • debug1
  • deeplearn3
  • devops3
  • dns1
  • doas1
  • docker19
  • dotnet core1
  • editor1
  • efficiency4
  • fuse1
  • gdb1
  • gemini cli1
  • git6
  • go1
  • golang6
  • gpu1
  • harbor3
  • helm1
  • hud1
  • influxdb1
  • jenkins1
  • jermine1
  • jira2
  • k8s3
  • kimi1
  • kubernates2
  • kubernetes3
  • kvm5
  • ldap2
  • linux33
  • linux管理1
  • markdown1
  • mcp1
  • microservice1
  • mirrors1
  • mq1
  • music1
  • nexcloud1
  • nvida-docker1
  • nvidia3
  • openclaw1
  • opencv2
  • openshift2
  • openstack1
  • ppt1
  • prompt engineering1
  • 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
  • zsh2
  • 交叉编译1
  • 产品经理1
  • 代理1
  • 关于我1
  • 写作1
  • 协议2
  • 反向代理1
  • 反向隧道1
  • 嵌入式1
  • 开发工具2
  • 开源1
  • 成本优化1
  • 故障排查1
  • 效率工具1
  • 敏捷开发1
  • 文件系统1
  • 武汉大学授课1
  • 端口转发1
  • 终端2
  • 编程工具1
  • 自动化1
  • 课程1
  • 跳板机1
  • 远程桌面1
  • 项目管理1

归档

标签云

agent ai ai agent aider ai编程 all alpine linux arm arm64 autossh c/c++ ceph chart claude code cli cloudflare code-review codex conda cross-compiling cuda cursor database debug deeplearn devops dns doas docker dotnet core editor efficiency fuse gdb gemini cli git go golang gpu harbor helm hud influxdb jenkins jermine jira k8s kimi kubernates kubernetes kvm ldap linux linux管理 markdown mcp microservice mirrors mq music nexcloud nvida-docker nvidia openclaw opencv openshift openstack ppt prompt engineering 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の博客