
Go
Yanbin_Q
真没什么要交待的,保持沉默
展开
-
Go 运行期加载 C 动态库(Linux版)
前面写的一篇Go 调用 C 写的动态库完整例子(Linux版),是在告诉编译器用 /* #cgo ...*/ 的方式去加载动态库libadd.so,这让代码丧失了一定的灵活性,比如同样的函数由多个动态库提供了不同的实现。这就需要做到在 Go 程序中可根据不同的输入条件选择不同的动态库实现,大概是if 条件1 { loadLibrary("libadd1.so") 调用其中的实现函数 addelse if 条件 2 { loadLibrary("libadd2.so")...原创 2021-09-03 10:34:37 · 459 阅读 · 0 评论 -
Go 语言使用 Go Modules(go.mod) 来管理依赖
前几日系统性差不多读完了一本讲解 Go 语言的书籍,记录下几篇笔记,现在终于能够开始看看专题性的知识了。首先就是关于 Go 如何管理依赖的问题,Java 经历了最早逐个下载 jar 包,到现在用 maven 来描述项目依赖,及进行项目的构建。而 Go 的起点还是要高一些,从一开始就有go get,go install命令来从中心库下载依赖。但管理多版本依赖是个问题,也没有明确的方式来怎么描述一个项目的依赖。因此也就产生过一些第三方的 Go 依赖管理Glide(使用 glide.yaml ...原创 2021-09-03 10:33:58 · 330 阅读 · 0 评论 -
Go 调用 C 写的动态库完整例子(Linux版)
总有那么一些老的,或高效的库是用 C/C++ 实现的,于是在其他语言中如果使用动态共享库就成了个问题。Java 要调用动态库需要用 JNI, 更快捷的话可使用第三方包装好的 JNI 调用库。在 Java 中要映射 C/C++ 的类型麻烦些,因为 Java 没有指针类型,所以从这方面来讲 Go 调用动态库幸许会更简单些。下面我们自己在 Linux 下做一个动态库(.so 文件 -SharedObject),然在用 Go 来使用它。本文所用的操作系统为 Ubuntu20.04, 以 gcc 作为编译...原创 2021-08-24 10:01:32 · 373 阅读 · 0 评论 -
Go 语言新手笔记(五)
终于来到的 Go 的网络编程了,来写一个 TCP 服务端与客户端的程序。要用到 Go 语言的 net 包,是一个标准的 Listen+Accept 结构, 下面是一个简单的 TCP Server/Client 端的例子,启动了 Server 端口,可以用 telnet 去连接,也可以用 client.go来连接阅读全文 >>...原创 2021-08-24 10:00:54 · 78 阅读 · 0 评论 -
Go 语言新手笔记(四)
学到了 Go 语言本身的语法之后,开始步入 Go 的应用部分,掌握一个语言不得不接触的就是它对文件,网络的操作。在正式进入主题之前不得不抱怨一下 Go 的官方编码规范中的代码缩进格式。曾经 Google 出的 Java 缩进规范是用两个空格(通常是用四个空格),并且是杜绝用 Tab 进行缩进的,因为 Tab 的宽度是不很确定的。然而 Google 建议 Go 的代码格式化工具 gofmt 却反常规的强制使用 Tab 进行缩进,而且是。本人用 IntelliJ IDEA 编写 Go, 即使在 Go..原创 2021-08-24 10:00:25 · 126 阅读 · 0 评论 -
Go 语言新手笔记(三)
终于要开始了解 Go 的结构体和接口了。Go 的结构体只是一种纯粹的数据类型,而不像 C/C++ 的结构体里还能添加方法。Go 的 struct 更像是 Python 的 dataclass, 或 Java 的 record。Go 的结构体是值类型,通过 new 函数来创建,在 C/C++ 中,只要是 new 得到的就是指针。结构体的字段名称也可以用_, 相当一个点位填充,字段也可以只有类型没有名称,称之为匿名字段。阅读全文 >>...原创 2021-08-24 09:59:48 · 74 阅读 · 0 评论 -
Go 语言新手笔记(二)
Go 语方的数组声明方式别具一格,把 [] 看得太重了,看下面的各种声明方式 1 2 3 4 5 6 7 var a = [...]int{18, 20}// 这是一个数组,如果省略 ..., 写成[]int{18, 20} 就是一个 slice var b = [5]string{"hello", 3: "ok"} //指定位置初始化 var c = [...]float32{2.0...原创 2021-08-24 09:59:10 · 107 阅读 · 0 评论 -
Go 语言新手笔记(一)
Go 语言 2009 年面世,几个成功项目 Docker, Kubernetes, etcs, consul, flannel, 还有 Terraform。Go 编译运行快,听说学习也不难。安装好 Go 后,有两个环境变量很重要, GOPATH 是工作目录,GOROOT 是 Go 的安装目录, 如 /usr/local/go。GOPATH 允许多个目录,用 : 或 ;(Windows 下) 分隔,当 GOPATH 有多个目录,go get 命令的包放在第一个目录下。$GOPATH 目录中约定的三个子原创 2021-08-24 09:58:21 · 96 阅读 · 0 评论