govendor

go vendor 是go 1.5 官方引入管理包依赖的方式,类似于java的maven。

其基本思路是,将引用的外部包的源代码放在当前工程的vendor目录下面,go 1.6以后编译go代码会优先从vendor目录先寻找依赖包。

 

 

Golang

1.package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

2.关键字

Go 代码中会使用到的 25 个关键字或保留字:

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符:

append bool byte cap close complex complex64 complex128 uint16
copy false float32 float64 imag int int8 int16 uint32
int32 int64 iota len make new nil panic uint64
print println real recover string true uint uint8 uintptr

3.数据类型

Go 语言按类别有以下几种数据类型:

序号 类型和描述
1 布尔型
布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
2 数字类型
整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。
3 字符串类型:
字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。
4 派生类型:
包括:

  • (a) 指针类型(Pointer)
  • (b) 数组类型
  • (c) 结构化类型(struct)
  • (d) Channel 类型
  • (e) 函数类型
  • (f) 切片类型
  • (g) 接口类型(interface)
  • (h) Map 类型

数字类型

Go 也有基于架构的类型,例如:int、uint 和 uintptr。

序号 类型和描述
1 uint8
无符号 8 位整型 (0 到 255)
2 uint16
无符号 16 位整型 (0 到 65535)
3 uint32
无符号 32 位整型 (0 到 4294967295)
4 uint64
无符号 64 位整型 (0 到 18446744073709551615)
5 int8
有符号 8 位整型 (-128 到 127)
6 int16
有符号 16 位整型 (-32768 到 32767)
7 int32
有符号 32 位整型 (-2147483648 到 2147483647)
8 int64
有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

浮点型:

序号 类型和描述
1 float32
IEEE-754 32位浮点型数
2 float64
IEEE-754 64位浮点型数
3 complex64
32 位实数和虚数
4 complex128
64 位实数和虚数

其他数字类型

以下列出了其他更多的数字类型:

序号 类型和描述
1 byte
类似 uint8
2 rune
类似 int32
3 uint
32 或 64 位
4 int
与 uint 一样大小
5 uintptr
无符号整型,用于存放一个指针

 

4.函数参数

函数如果使用参数,该变量可称为函数的形参。

形参就像定义在函数体内的局部变量。

调用函数,可以通过两种方式来传递参数:

传递类型 描述
值传递 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递 引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。

 

Demo:

package main

import (
   "fmt"
   "math"
   "unsafe"
)

var a,b int
var e,f = 10,"hy"
const NUM,TIME = 20,60

func main() {
   //打印
   fmt.Println("Hello,World!")
   /**
   打印aaa
    */
   fmt.Println("aaa")

   const x,y,z = false, 33,"buaa"
   c := 8
   a = 1
   b = 2
   fmt.Println(a + b)
   fmt.Println(c)
   fmt.Println(e,f,NUM,TIME)
   fmt.Println(x,y,z)

   const(
      start = iota
      a = "xyz"
      b = len(a)
      d = unsafe.Sizeof(a)
      end = iota
   )
   fmt.Println(a,b,d)
   fmt.Println(start,end)

   const (
      q = 1 << iota
      w = 5 << iota +1
      e
      r
   )
   fmt.Println(q,w,e,r)
   if(q != w){
      fmt.Println("不等")
   }

   f := false
   t := true
   fmt.Println(f==t)
   fmt.Println(f && t)
   fmt.Println(f || t)
   fmt.Println(!(f && t))

   var val int = 2
   var ptr *int
   fmt.Println(&val)
   ptr = &val
   fmt.Println(ptr)
   fmt.Println(*ptr)

   for i:=0;i<5;i++{
      fmt.Println("循环", i)
   }

   numbes := [5]int{1,3,4}
   for i,tmp := range numbes{
      fmt.Printf("第%d个数是:%d",i,tmp)
      fmt.Println()
   }

   var numA,numB = 10,20
   fmt.Println("最大数为:",max(numA,numB))
   fmt.Println(swap("buaa","hy"))

   getSqrt := func(x float64) float64{
      return math.Sqrt(x)
   }
   fmt.Println(getSqrt(9))
}

func max(a int,b int) int{
   if(a > b){
      return a
   }
   return b
}

func swap(a string,b string) (string,string){
   return b,a
}

输出结果: