Golang

安装

屎一样的包管理

垃圾

每个版本都改

GoPath 目录

  • bin
  • pkg
  • src

环境变量

用户变量

变量
GOPATH*:\*\GoPath
Path{go安装目录}\bin

全局变量修改(永久)

1go env -w GO111MODULE="on"

国内代理

1go env -w GOPROXY=https://goproxy.cn,direct

配置

1go env

新建项目

GoPath/src 目录下

1mkdir hello
2cd hello
3
4//包管理
5go mod init

整理依赖

  • 删除不需要的依赖包
  • 下载新的依赖包
  • 更新go.sum
go mod tidy

输出

换行

1fmt.Println("Hello")
1fmt.Printf("asdasd %v a%vsda", 123, 123)

防止转义

1fmt.Println("asda\asda")
2
3fmt.Println(`asda\asda`)

变量

基本类型

基本类型

1bool
2string
3int int8 int16 int32 int64
4uint uint8 uint16 uint32 uint64 uintptr
5byte == uint8
6rune == int32 //表示unicode码点
7float32 float64
8complex64 complex128

类型转换

string 转 int

1int,err:=strconv.Atoi(str)

int 转 string

1string:=strconv.ltoa(int)

string 转 []byte

1var data []byte = []byte(str)

[]byte 转 string

1var str string = string(data[:])

float64 互转 string

1float,err := strconv.ParseFloat(string,64)
2string := strconv.FormatFloat(float64,'E',-1,64)

简短形式

1count := 20

var

1var count =10

或者

1var count int 
2count = 1

声明类型

1var count float64 = 3.1415
2var count float32 = math.Pi
3var count float32
4var count uint = 123
5var count int64 = 123
6var count uint64 = 41.3e14
7var count float64 = 41.3e19

多变量

1var a, b int
2var c string
3a, b, c = 5, 7, "abc"
1var java,c,test=1,"dfrer",true
2
3java,c,test:=1,"dfrer",true

很大的数

SetString(数字,进制)

1count := new(big.Int)
2
3count.SetString("20000000000000000000000000000000000000000000000000000000000000000000000000", 10)

或者

1count := new(big.Int).SetString("20000000000000000", 10)

随机数

1rand.Intn(100)

指针

内存地址

1bcd := &abc
2
3fmt.Println(bcd)

内存地址获取变量

1bcd := &abc
2
3fmt.Println(*bcd)

常量

1const dostamce = 200000000

多个常量

1const (
2    a = 0
3    b = 1
4    c = 2
5)

if 判断

1if command == "go east" {
2 fmt.Println("123s")
3}
4if !(command == "go east") {
5 fmt.Println("123s")
6}
1if commands := "a"; commands == "a" {
2 fmt.Println("abc")
3}

for 循环

例子

默认

 1for i := 0; i < 5; i++ {
 2 println(i)
 3    if i = 4 {
 4  break
 5 }
 6}
 7
 8for key, v := range user.User_order {
 9  fmt.Println(v)
10     fmt.Println(key)
11 }
12
13
14for _, v := range user.User_order {
15  fmt.Println(v)
16  o.LoadRelated(v.User, "User_order")
17 }

定义

1var count = 10
2for count < 50 {//true就进行循环
3 println(count)
4 count++
5}

死循环

1for{
2    //die
3}

switch

自带break

例子

1switch command {
2case "go east":
3 fmt.Println("123s")
4case "walk outside":
5 fmt.Println("aaaa")
6}

执行前先执行语句

1switch v:=x+y;v{
2}

没有条件的switch

 1switch {
 2case command == "go east":
 3 fmt.Println("1")
 4case command == "walk outside":
 5 fmt.Println("2")
 6    fallthrough //执行下一个(case或default)
 7 // case command == "a":
 8 //  fmt.Println("1")
 9default:
10 fmt.Println("default")
11}

array 数组

声明

一维数组

1var planets [2]string
2planets[0] = "a"
3planets[1] = "b"
1dwarfs := [...]string{
2 "a",
3 "b"
4}

二维数组

1a := [2][3]int{{1,1,1},{2,2,2}}
1a := [...][2]int{{1,1},{2,2},{3,3},{4,4}}

for循环

一维数组

1for i, dwarf := range dwarfs {
2 println(i, dwarf)
3}

二维数组

1a := [2][3]string{{"a", "b", "c"}, {"d", "e", "f"}}
2
3for k1,v1 := range arr{
4    fmt.Println(k1,v1)//0 [a b c]
5    
6    for k2,v2 := range v1{
7        fmt.Println(k2,v2)//0 a
8    }
9}

切片

例子

1array := string{"a","b","c"}
2terrestrial := array[0:1]

限制切片容量

1array := string{"a","b","c"}
2terrestrial := array[0:1:2]

预分配

声明长度和容量

1//长度10 容量20
2var a []int = make([]int, 10, 20)
3
4b := make([]int, 0, 2130)
5
6//省略 长度10 容量10
7var a []int = make([]int, 10)
8b := make([]int , 10)

append

1dwarf := []string{"a", "b", "c"}
2dwarf = append(dwarf, "d","e")
3fmt.Println(dwarf)

输出

1[a b c d e]

长度

现有长度

1println(len(array))

容量

数组可存放长度上限

1println(cap(array))

map 对象

赋值不会复制,指向同一个内存

 1obj := map[string]int{
 2 "code": 200,
 3 "msg":  123,
 4}
 5
 6fmt.Println(obj["code"])
 7//200
 8
 9fmt.Println(obj["no"])
10//0

简短形式

1obj := []float64{
2 2.2, 3.4, 123.2,
3}

赋值

1obj["data"]=123

预声明

1tem := make(map[float64]int, 2)
2tem[2.2] = 2
3tem[2.3] = 3
4tem[2.4] = 4

逗号与ok

1if data, ok := obj["code"]; ok {
2 fmt.Println(data)
3} else {
4 fmt.Println("?")
5}

删除

1delete(obj, "msg")

for循环

 1for _, t := range obj {
 2 fmt.Println(t)
 3}
 4
 5//2.2 3.4 123.2
 6
 7for a, t := range obj {
 8 fmt.Println(a)
 9}
10//0 1 2

func 函数

命名

包内可以小写

外部使用必须大写

返回int类型和错误

1func funcDemo (a ...interface{}) (int, error) {
2 return 1
3}

//可变参数

 1func asad(pre int, word ...string) []string {
 2 pre++
 3 return word
 4}
 5
 6fmt.Println(asad(2, "aassa", "asd"))
 7
 8a := []string{"aassa", "asd"}
 9fmt.Println(asad(2, a...))//函数能修改a
10
11//[aassa asd]

辅助函数

string

断字符串s中是否包含个子串str。包含或者str为空则返回true

1var command = "walk outside"
2var exit = strings.Contains(command, "outside")
3fmt.Println(exit)
4//true

休眠

1time.Sleep(time.Second)

beego

bee工具创建

new

新建一个 Web 项目

1bee new myproject

api

新建一个 Api 项目

1bee api apiproject

run

运行

1bee run

pack

打包

1bee pack

version

版本号

1bee version

generate

自动生成代码

migrate

数据库迁移

dockerize

docker化应用

1bee dockerize -image="library/golang:1.6.4" -expose=9000
浏览量:加载中... 评论数:加载中...