golang 重要知识点(一)

理解go env 中的重要变量

首先我们要来看一下go env(目前版本1.16xxx)

点击查看代码
#####是否使用GOMOD 模式
GOPATH="/Users/dashuai/go"
GO111MODULE=""
即使项目在您的 GOPATH 中,GO111MODULE = on 仍将强制使用 Go 模块。需要 go.mod 正常工作。

GO111MODULE = off 强制 Go 表现出 GOPATH 方式,即使在 GOPATH 之外。

GO111MODULE = auto 是默认模式。在这种模式下,Go 会表现

当您在 GOPATH 外部时, 设置为 GO111MODULE = on,
当您位于 GOPATH 内部时,即使存在 go.mod, 设置为 GO111MODULE = off。
#####和跨平台编译相关的变量
CGO_ENABLED=1 是否开启go-c 依赖
GOARCH="amd64"  系统架构X86、ARM、RISC、MIPS 
GOOS="darwin" 运行系统类型
#####

GOBIN=""
GOCACHE="/Users/dashuai/Library/Caches/go-build"
GOENV="/Users/dashuai/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOINSECURE=""
GOMODCACHE="/Users/dashuai/go/pkg/mod"
##### go proxy 相关配置 
GONOPROXY="" 不使用goproxy
GONOSUMDB="" 不进行sum校验
GOPRIVATE="" 应该被视为私有的模块路径前缀的 glob 模式列表 (注:glob 是用于匹配符合指定模式的文件集合的一种语言,下同)。 充当 “GONOPROXY” 和 “GONOSUMDB” 的默认值。
GOPROXY="https://goproxy.cn,direct"  goproxy地址
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org" gosum 地址
#####
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.16.6"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/hk/k1f6bc8x4k9bs9m4w_zzy63h0000gn/T/go-build2150469306=/tmp/go-build -gno-record-gcc-switches -fno-common"

go iota

###跳过部分值
const (
 a iota  0
 b         1
 _         2  | 如果 c = 100 则按照实际赋值 
 d        3
         )
### 另起行则从新按零记录
const e iota 0
用来生成存储单位
const (
            _  = iota
            KB = 1 << (10 * iota)
            MB = 1 << (10 * iota)
            GB = 1 << (10 * iota)
            TB = 1 << (10 * iota)
            PB = 1 << (10 * iota)
        )
# 多值赋值
const (
            a, b = iota + 1, iota + 2 //1,2
            c, d                      //2,3
            e, f                      //3,4
        )

go array 和 slice

array 长度不可变,array 在函数中传递时会进行全复制。函数内部array 发生变化则函数外部array 不变化。除非传递函数指针.
slice 长度可变,在函数传递中,函数内部也会操作底层数组引起外部改变

posted @ 2022-10-24 11:47  萱乐庆foreverlove  阅读(28)  评论(0编辑  收藏  举报