1、Go语言介绍及安装

        (1)Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

2、Go语言基础语法

package main

import "fmt" //包的导入

func main() {
   /* 在控制台打印第一句话 */
   fmt.Println("Hello, World!")
}

Go的25个关键字

(1)变量的命名

var age int;

(2)fmt.Sprintf 格式化字符串并赋给一个新的值

var age int = 18
age1 := fmt.Sprintf("%v", age)
fmt.Println(age1)

另外这里有一个GoLand使用的小技巧

 

这里最后.var然后回车可以该结果的类型以及用一个变量接收 “:=”就是自动识别类型并赋值的意思。

(3)Go语言的数据类型

 

(4)语言变量的申明

同时申明一个或多个变量(Go语言中结尾不需要写;号)

var a string = "你好"

var b, c int = 1, 2

还可以简写为上面写过的 age := 18 这种形式

注:局部变量申明在方法体内,全局变量申明在方法体外

package main

import "fmt"

var name = 6  //全局变量

func main() {
    //局部变量
	var a int = 8
	fmt.Println(a)
	fmt.Println(name)
}

(5)常量的申明

const AGE int = 10 //申明后的常量必须有初始值且值不可以更改
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

(6)语言运算符(相关运算符和java并无太大差别)

 (7)if 条件语句(相对于java,Go不需要小括号包裹条件)

func main() {
   /* 局部变量定义 */
   var a int = 666;
 
   /* 判断布尔表达式 */
   if a < 20 {
       /* 如果条件为 true 则执行以下语句 */
       fmt.Printf("a 小于 20\n" );
   } else {
       /* 如果条件为 false 则执行以下语句 */
       fmt.Printf("a 不小于 20\n" );
   }
   fmt.Printf("a 的值为 : %d\n", a);

}

(8)switch用法

 func main() {
   /* 定义局部变量 */
   var grade string = "B"
   var marks int = 90

   switch marks {
      case 90: grade = "A"
      case 80: grade = "B"
      case 50,60,70 : grade = "C"
      default: grade = "D"  
   }

   switch {
      case grade == "A" :
         fmt.Printf("优秀!\n" )    
      case grade == "B", grade == "C" :
         fmt.Printf("良好\n" )      
      case grade == "D" :
         fmt.Printf("及格\n" )      
      case grade == "F":
         fmt.Printf("不及格\n" )
      default:
         fmt.Printf("差\n" );
   }
   fmt.Printf("你的等级是 %s\n", grade );      
}

(9)for 循环是一个循环控制结构,可以执行指定次数的循环。此外,for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环(这个后面再仔细介绍)

        如:遍历输出1到10

        for i := 0; i <10 ; i++ {

         fmt.Println(i)

        }

        例1:使用for写出99乘法表

for i := 1; i < 10; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%d*%d=%d ", j, i, i*j)
		}
		fmt.Println("")
	}
var arr = [5]int{1000, 2, 3, 7, 50}
	for i := 0; i < len(arr); i++ {
		var k = i
		for j := i; j < len(arr); j++ {
			if arr[j] < arr[k] {
				k = j
			}
		}
		arr[i], arr[k] = arr[k], arr[i] //交换两个数
	}

(10)函数的使用(什么是形式参数、实际参数?下面的num1,num2叫形式参数,我们调用该方法是往里面传入具体的值叫实际参数)

//返回两个数字中的最大值
func getmax(num1, num2 int) int {
	var result = 0
	if num1 > num2 {
		result = num1

	} else {
		result = num2
	}
	return result
}

也可以有两个返回值:

func get(num int, num1 int) (int, int) {
	return num, num1
}

(11)闭包(就是函数里面嵌套函数,外层函数返回内层函数的函数体)

Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。

以下实例中,我们创建了函数 getSequence() ,返回另外一个函数。该函数的目的是在闭包中递增 i 变量,代码如下:

package main

import "fmt"

func getSequence() func() int {
   i:=0
   return func() int {
      i+=1
     return i  
   }
}

func main(){
   /* nextNumber 为一个函数,函数 i 为 0 */
   nextNumber := getSequence()  

   /* 调用 nextNumber 函数,i 变量自增 1 并返回 */
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   fmt.Println(nextNumber())
   
   /* 创建新的函数 nextNumber1,并查看结果 */
   nextNumber1 := getSequence()  
   fmt.Println(nextNumber1())
   fmt.Println(nextNumber1())
}

(12)指针的介绍

一个指针变量指向了一个值的内存地址。指针也有自己的内存地址

package main

import "fmt"

func main() {
	var age int = 8
	p := &age
	fmt.Printf("age的地址是:%x\n", &age)
	fmt.Printf("age的地址是:%x\n", p)
	fmt.Printf("指针地址是:%x\n", &p)
	fmt.Printf("p对应的值是:%x\n", *p)
}

输出结果:

(13)Go语言数组

定义长度为5的数组,也可以直接初始化传入相应个数的值。这里介绍for循环的另外一种使用方法:

可以依次遍历输出数组元素下标和对应的值。

package main

import "fmt"

func main() {
	arry := [5]int{}
	fmt.Printf("%T", arry)

	//初始化数组
	arr := [5]int{1, 2, 3, 4, 5}
	println(len(arr))
	for i, num := range arr {
		fmt.Println(i, num)
	}
}

3、下一节接着介绍Go语言其它语法。水平有限,错误的地方欢迎指正。