先来一个最简单的例子
package main 包声明,知名这个文件属于哪个包
import "fmt" fmt包实现了格式化IO(输入/输出)的函数
func main() { (main函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数))
/* 这是我的第一个简单的程序 */
fmt.Println("Hello, World!")
}
1.变量声明
第一种,指定变量类型,声明后若不赋值,使用默认值。
var a int =10
第二种,根据值自行判定变量类型。
var b = 10
第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。
c := 10
(注意,第三种声明一定要写在输出函数里)
2.输出
卸载输出函数中的必须输入(局部函数声明必须使用),不然报错,在输出函数外写的全局变量,可以声明并不使用
var a int = 10
var b = 12.5
var e,f = 123, "hello"
func main(){
c := "shangtian"
println(a,b,e)//报错,c声明但没使用
}
3.iota,特殊常量,可以认为是一个可以被编译器修改的常量。
在每一个const关键字出现时,被重置为0,然后再下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1。
iota 可以被用作枚举值:
const (
a = iota //0
b = iota //1
c = iota //2
)
可以简写为如下形式:
const (
a = iota
b
c
)
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i) // 0,1,2,ha,ha,100,100,7,8
}
func main(){
const(
i = 1 << iota // iota 是 0,左移0位,1乘2的0次方
j = 3 << iota // Iota是 1,左移1位,3×2的1次方
k
l
)
println(i,j,k,l)//1,6,12,24
}
4.运算符
(1)<<
左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0
(2)>>
右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。
5.Go语言函数
函数是基本的代码块,用于执行一个任务。Go 语言最少有个 main() 函数。
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 100
var b int = 200
var ret int
/* 调用函数并返回最大值 */
ret = max(a, b)
fmt.Printf( "最大值是 : %d
", ret )
}
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int { //函数的定义格式 括号外面的int是返回类型
/* 定义局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
函数返回多个值
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Mahesh", "Kumar")
fmt.Println(a, b)
}
6.Go 语言变量
Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑
package main
import "fmt"
/* 声明全局变量 */
var g int = 20
func main() {
/* 声明局部变量 */
var g int = 10
fmt.Printf ("结果: g = %d
", g) // 10
}
7.声明数组
初始化数组
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
8.Go 指针
func main() { var a int= 20 /* 声明实际变量 */ var ip *int /* 声明指针变量 */ ip = &a /* 指针变量的存储地址 */ fmt.Printf("a 变量的地址是: %x ", &a ) /* 指针变量的存储地址 */ fmt.Printf("ip 变量储存的指针地址: %x ", ip ) /* 使用指针访问值 */ fmt.Printf("*ip 变量的值: %d ", *ip ) }
Go 空指针
当一个指针被定义后没有分配到任何变量时,它的值为 nil。
package main
import "fmt"
func main() {
var ptr *int
fmt.Printf("ptr 的值为 : %x
", ptr )
}