a、为何学习GO语言?
从个人角度来看,第一是被GO语言传说中的那样超高的开发效率和运行效率所吸引;第二是GO语言在语言层面支持并发,这在现在的编程业务中是很方便的;第三是由于前两点,我觉得以后GO会火起来;最后一点,做技术嘛,跟着微软或者谷歌总会是有肉吃的^_^!
b、第一个GO程序
根据国际惯例,学习一门语言,总会以一个Hello World开始,同样,看第一个GO程序来感受一下GO的世界
package main import "fmt" func main(){ fmt.Println("Hello World!") }
package---包声明,表示这段代码属于哪个包
import---导入包,导入fmt是因为需要使用fmt包中的Println函数//不能导入代码中没有用到的包,编译会报错
/******************开始语言*********************/
一、顺序编程
1、变量
a、声明:
引入关键字 var , 类型信息在变量名之后
var a intvar v2 string var v3 [10]int //数组 /*多个变量一起声明*/var ( v1 int v2 string)
b、初始化
var v1 int = 10 var v2 = 10 //可以自动推导类型 v3 := 10 //v3不能是已经声明过的变量
c、赋值
var v4 int v4 = 10/*多重赋值*/a , b = 2 , 3i , j = j , i
d、匿名变量
Go语言支持多返回值和匿名变量,由于函数可以多返回值,在接收的时候可以选择性的接收
func getName()(firstName , lastName , nickName){ return "zhangsan" , "lisi" , "wuhaha" } _ , _ , nickName := getName()
2、常量
a、字面常量-----程序中硬编码的常量(无类型)
-12 3.14159265358979325846//浮点型的常量 3.2 + 12i //复数型的常量 true //布尔型的常量 "foo" //字符串型的常量
b、常量定义
关键字 const
const Pi float64 = 3.14159265358979323846 const ( size int64 = 1024 eof = -1 ) const mask = 1 << 3 //编译期运算的常量表达式
常量赋值是一个编译期行为,所以右值不可以是任何需要运行期才能得出结果的表达式
如下错误栗子:
const errooooor = os.GetEnv("HOME")//os.GetEnv()要在运行期才能得出结果
c、预定义常量
true , false , iota
iota---可被编译器修改的常量,每const出现一次,iota被重置为0,在下一个const出现之前,没出现一次iota,iota代表的数字+1
const ( c0 = iota //co == 0 c1 = iota //c1 == 1 c2 = iota //c2 == 2 ) const ( c0 = 1 << iota //c0 == 1 c1 = 1 << iota //c1 == 2 c2 = 1 << iota //c2 == 4 )
d、枚举---定义一组常量
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
numberOfDays // 这个常量没有导出
)
同Go语言的其他符号( symbol)一样,以大写字母开头的常量在包外可见。以上例子中numberOfDays为包内私有,其他符号则可被其他包访问。