note/src/g/go/golang.md
2024-01-26 17:33:37 +08:00

109 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
tags:
creation date: 2023-09-08 14:27
modification date: 星期五 8日 九月 2023 14:27:29
---
# go
## 设计哲学
- 追求简洁、优雅
- 垂直扩展:类型嵌入
- 水平扩展:接口
- 原生并发,轻量高效
- select | chanel 程序级扩展
- 面向工程,自带电池
## 项目工程
### 目录结构
- cmd
- internal
- pkg
- test
### 命名规范
- 包 小写,单个单词
- 包内的命名不建议含有包名
## 类型
任何类型都可以拥有方法
### 常量
无类型常量
对象 nil 可直接调用函数 (单例模式)
## 反射
```go
// emptyInterface is the header for an interface{} value.
type emptyInterface struct {
typ *rtype
word unsafe.Pointer
}
// rtype is the common implementation of most values.
// It is embedded in other struct types.
//
// rtype must be kept in sync with ../runtime/type.go:/^type._type.
type rtype struct {
size uintptr
ptrdata uintptr // number of bytes in the type that can contain pointers
hash uint32 // hash of type; avoids computation in hash tables
tflag tflag // extra type information flags
align uint8 // alignment of variable with this type
fieldAlign uint8 // alignment of struct field with this type
kind uint8 // enumeration for C
// function for comparing objects of this type
// (ptr to object A, ptr to object B) -> ==?
equal func(unsafe.Pointer, unsafe.Pointer) bool
gcdata *byte // garbage collection data
str nameOff // string form
ptrToThis typeOff // type for pointer to this type, may be zero
}
```
# Doc
https://www.cntofu.com/book/73/ch2-cgo/ch2-09-static-shared-lib.md
# CMD
```shell
go build -x F:\go\vulkan\cmd\main.go
```
# CGO
```shell
go env -w CGO_ENABLED=1
set CGO_CFLAGS=-IF:\Coding\GoModule\cgo
set CGO_LDFLAGS=-LF:\Coding\GoModule\cgo -I:vulkan.lib
go build -o main.exe main.go
#C:\Users\Administrator\AppData\Roaming\go
```
# 条件编译
## 标签编译
## 文件后缀
https://blog.csdn.net/wohu1104/article/details/121842932