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

2.0 KiB
Raw Blame History

aliases tags creation date modification date
2023-09-08 14:27 星期五 8日 九月 2023 14:27:29

go

设计哲学

  • 追求简洁、优雅
  • 垂直扩展:类型嵌入
  • 水平扩展:接口
  • 原生并发,轻量高效
    • select | chanel 程序级扩展
  • 面向工程,自带电池

项目工程

目录结构

  • cmd
  • internal
  • pkg
  • test

命名规范

  • 包 小写,单个单词
    • 包内的命名不建议含有包名

类型

任何类型都可以拥有方法

常量

无类型常量

对象 nil 可直接调用函数 (单例模式)

反射

// 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

 go build -x F:\go\vulkan\cmd\main.go

CGO

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