https://github.com/avelino/awesome-go
命令源码文件(main)与库源码文件处同一代码包中,不能go build /go install,
同一代码包中可以有多个命令源码文件,可以go run,但不能build/install,所以一个命令一个包,build 生成在当前目录,intall 生成在bin或/pkg目录
如果文件名与package名不同,文件第一行一定要package xxx
import(
. “xx” #可以使用xx中的内容,就不用前缀了
_ “xx” #只触发了init操作,什么也没导入
)
func init(){} 包初始化方法 在main()之前完成,且只执行一次
全局变量初始化->init->main
类型断言 x.(t) t为interface
interface{}(123).(int)
[…]string{“go”,”python”} #不写长度有,由初始值确定
go 语方中中只有传值,没有传引用
delete(mapname,key) #删除map的key
go test #文件为xx_test.go ; testxx(t *testing.T,xx)
GOROOT /GOPATH
go get 下载到gopath指定第一个,并完成构建和安装
export PATH=$PATH:${GOPATH//://bin:}/bin
export GOBIN=
go env
https://github.com/hyper-carrot/go_command_tutorial
golang有两个特殊的包名称 all,std
all 代表GOPATH中所有工作区路径中所有代码包,std 标准库中的所有代码
import/package
chan/func/interface/map/struct/const/type/var
go/select/break/case/continue/defalut/defer/else/fallthrough/for/goto/if/range/return/switch
:= //申明一个变量,同时赋值,只能在函数体内用
切片的长度就是它所包含的元素个数。
defer 语句会将函数推迟到外层函数返回之后执行
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数
https://go-zh.org/pkg/builtin/
for 循环的 range 形式可遍历切片或映射
godoc -http=:8080
4form
r.Form["username"]也可写成r.FormValue("username")。调用 r.FormValue 时会自动调用
r.ParseForm,所以不必提前调用。r.FormValue只会返回同名参数中的第一个,若参数不存
在则返回空字符串
getint,err:=strconv.Atoi(r.Form.Get("age"))
//中文
if m, _ := regexp.MatchString("^[\x{4e00}-\x{9fa5}]+$", r.Form.Get("realname")); !m {
return false
}
maps, slices 和 channels 引用语义,用make分配空间
struct,array等值类型,用new分配空间
x := []int{1, 2, 3}
y := []int{4, 5, 6}
x = append(x, y...)
int( x ) //x 转为int
<-chan int (x ) // x转为chan int,再取数据
(<-chan int )(x ) //x 转为只能取数据的chan int
Go语言的字符串是UTF-8编码,其底层使用4个字节表示,也就是32 bit
func (x type) string() string{} // 定义String()方法,自定义了格式化指令%v的输出