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语言其它语法。水平有限,错误的地方欢迎指正。