GoBase - Kuangcp/Note GitHub Wiki
目录 start
目录 end|2020-11-04 20:24|
官网 | 镜像官网 | Github Repo | Go Doc
project-layout
项目结构规范
1.11 开始支持 Wiki
-
go env -w GOSUMDB=off
关闭官方 sum 校验服务
配置国内源
export GO111MODULE=on
export GOPROXY=https://mirrors.aliyun.com/goproxy/
export GOSUMDB=sum.golang.google.cn
-
go mod init moduleName
按名字初始化模块-
注意,如果想通过
go get URL
方式进行安装,就必须使用代码托管的完整地址, 不需要就可以简化包名
- 例如
module github.com/{username}/{repo}/path/to
-
注意,如果想通过
-
go mod edit -replace github.com/kuangcp/gobase/cuibase=./../cuibase
- go.mod文件会新增:
replace github.com/kuangcp/gobase/cuibase => ./../cuibase
- 多模块开发时,使用本地开发的模块取代发布的版本
- fork 别人项目后开发,可用来替换成自己的模块
replace gihub.com/aaa/bbb => gihub.com/ccc/bbb
- go.mod文件会新增:
-
go clean -modcache
go mod graph | 列出模块依赖(包含依赖传递) |
go mod tidy | 删除错误或者不使用的modules |
go mod vendor | 生成vendor目录 |
go mod verify | 验证依赖是否正确 |
go mod why | 查找依赖 |
go get
go get golang.org/x/text@latest | 拉取最新的版本(优先择取 tag) |
go get golang.org/x/text@master | 拉取 master 分支的最新 commit |
go get golang.org/x/[email protected] | 拉取 指定 tag |
go get golang.org/x/text@342b2e | 拉取 指定 commit |
go get github.com/smartwalle/alipay/v3 | 拉取v3版本 设计最坑
|
go get -u | 更新 mod |
go list -m -versions golang.org/x/text | 列出可安装版本 |
类型后置的设计相关文章
螺旋形(C/C++)和顺序(Go)的声明语法
Why do a lot of programming languages put the type after the variable name?
strings 包 提供了常用字符串API
int8 int16 int32 int64 int(位数按操作系统字长而定 32/64)
// string到int
int,err:=strconv.Atoi(string)
// string到int64
int64, err := strconv.ParseInt(string, 10, 64)
// int到string
string:=strconv.Itoa(int)
// int64到string
string:=strconv.FormatInt(int64,10)
// 判断 key 存在
_, ok := dataMap["key"]
- 打印结构体
fmt.Printf("%v\n", object)
记住这个神奇的时间 2006-01-02 03:04:05
Go 中不是寻常的 YYYY-mm-dd 这种格式
基本结构
// 函数名 (参数 ) 返回值{函数体}
func functionName (param int) int {
}
使用函数作为参数
func doAny(functionName func(string, string)){}
可以多返回值 元组
类似于 Java 中的 finally 语句 例如
defer openFile.Close()
一个函数中可以定义多个 defer 语句, 执行顺序按定义顺序的逆序, 也就是栈的概念
递归读取当前目录的文件
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
filepath.Walk("./", walkfunc)
}
func walkfunc(path string, info os.FileInfo, err error) error {
if(!info.IsDir()){
fmt.Println(path)
}
return nil
}
statik
将文件打包入二进制执行文件中去
结构体必须是大写字母开头的成员才会被处理(大写字母开头才有对外权限)
type GridConfig struct {
ID int `json:"id"`
Row int `json:"row"`
Col int `json:"col"`
Data []int `json:"data"`
}
// 第一种
func (*GenerateGrid) ReadConfig() []GridConfig {
var datas []GridConfig
fp, _ := os.Open("grid.json")
dec := json.NewDecoder(fp)
for {
err := dec.Decode(&datas)
if err != nil {
fmt.Println(err)
break
}
//use v
// fmt.Printf("%+v", datas)
for _, line := range datas {
fmt.Println(" ", line)
}
}
// 第二种方式
var datas []GridConfig
raw, err := ioutil.ReadFile("./grid.json")
// fmt.Println(raw)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
err = json.Unmarshal(raw, &datas)
if err != nil {
fmt.Println("error:", err)
}
for _, line := range datas {
fmt.Println(" ", line)
}
return datas
}
忽略空字段
- 字段是指针类型 且注明 omitempty
Msg struct{
Text *Content `json:"text,omitempty"`
}
lorca
H5 + chromium + Golang
桌面端