Hello Golang 1 2 3 4 5 6 package mainimport "fmt" func main () { fmt.Print("Hello Golang" ) }
这是最简单的Go程序,可以看到我们处于main包,并且导入了fmt包,里面有基本的函数比如Print函数,用于输出到控制台。
变量的定义 用var修饰定义一个变量,可以同时赋值也可以不初始化:
1 2 var variable1 type = valuevar variable type
这样写其实有些麻烦,但可以直接用:=运算符,这样就可以直接创建变量并赋值:
比如说:
1 2 3 4 5 6 7 8 9 10 package mainimport "fmt" func main () { var sum int = 0 var sum1 int pos := 123 }
一般来说,也可以用var()创建一系列的变量:
1 2 3 4 var ( sum int = 0 sum1 int )
常量的定义 利用const关键字即可:
1 const constant type = value
基本数据类型
类型
type
注释
整数类型
int
包括uintD和intD,D可取8、16、32、64。例如uint8、int32
单精度浮点类型
float32
支持复数
双精度浮点类型
float64
支持复数
字符串类型
string
没有char类型,但比如有str这个字符串变量,那么str[pos]就是单个字节类型
指针
*type
这语言居然有指针…
运算符 与C语言一样
条件语句 注意,一定要有大括号!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 if condition { ... } if condition { ... } else { ... } if condition1 { ... } else if condition2 { ... } else { ... }
循环语句 只有for循环,但for循环有时候可以当作foreach循环和while循环使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 for condition { ... } for initial; condition; post { } for key, value := range aMap { ... } for value := range array { ... }
函数 函数的定义:
1 2 3 4 func functionName (var1 type , ...) type { ... }
返回值类型可以不给,这样就是void的了
Go语言有个神奇的特性,那就是函数可以返回多个值(其实相当于C++里return了{}而已,说不上神奇,但C++的做法会麻烦些)
1 2 3 4 5 6 7 8 9 10 11 12 package mainimport "fmt" func swap (x, y string ) (string , string ) { return y, x } func main () { a, b := swap("Google" , "Runoob" ) fmt.Println(a, b) }
这里简单介绍引用传递,其实就是C语言的指针传递。在Go语言中,没有引用这个东西了,只有指针。
1 2 3 4 5 6 7 func swap (x *int , y *int ) { var temp int temp = *x *x = *y *y = temp }
至于这个函数带来的后果都知道。
指针 跟C语言类似:
1 2 3 4 5 6 7 8 var ptr *int val := 32 ptr = &val var ptr2 *int ptr2 = new (int ) *ptr2 = 24
不同的是,我们用nil关键字表示空指针(而不是nullptr了)
1 2 3 4 5 6 if ptr == nil { ... } if ptr != nil { ... }
Go支持多级指针,最常见的是二级指针:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package mainimport "fmt" func main () { var a int var ptr *int var pptr **int a = 3000 ptr = &a pptr = &ptr fmt.Printf("变量 a = %d\n" , a ) fmt.Printf("指针变量 *ptr = %d\n" , *ptr ) fmt.Printf("指向指针的指针变量 **pptr = %d\n" , **pptr) }
数组 定义一维数组:
1 var variable_name [SIZE] variable_type
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package mainimport "fmt" func main () { var n [10 ]int var i,j int for i = 0 ; i < 10 ; i++ { n[i] = i + 100 } for j = 0 ; j < 10 ; j++ { fmt.Printf("Element[%d] = %d\n" , j, n[j] ) } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 package mainimport "fmt" func main () { var i,j,k int balance := [5 ]float32 {1000.0 , 2.0 , 3.4 , 7.0 , 50.0 } ... for i = 0 ; i < 5 ; i++ { fmt.Printf("balance[%d] = %f\n" , i, balance[i] ) } balance2 := [...]float32 {1000.0 , 2.0 , 3.4 , 7.0 , 50.0 } for j = 0 ; j < 5 ; j++ { fmt.Printf("balance2[%d] = %f\n" , j, balance2[j] ) } balance3 := [5 ]float32 {1 :2.0 ,3 :7.0 } for k = 0 ; k < 5 ; k++ { fmt.Printf("balance3[%d] = %f\n" , k, balance3[k] ) } }
二维数组也可以:
1 var arrayName [ x ][ y ] variable_type
切片 当数组大小初始化为空的时候,这个数组就叫做切片(很像vector的赶脚)。其实就是个动态数组而已!