初识Golang
//今天第一次看Golang,作为初学者总结一下 为什么是GO年轻,它的诞生必然有他的意义,根据大家对他的介绍,总结下来如下: //今天简单了解了基础语法 基础组成package main import "fmt" func main() { fmt.Println("hello") } 可以看到
基本语法结构行分隔符Go并不像C那样每条语句以 注释单行注释以 标识符标识符第一个字符必须是字母或下划线。不可用关键字 数据类型
变量声明由字母、数字、下划线组成,不能以数字开头。
多变量声明var vname1,vname2,vname3 = v1,v2,v3 vname1,vname3 := v1,v3
常量const identifier [type] = value 运算符算术运算符+ - * / % ++ -- 关系运算符== != > < >= <= 逻辑运算符&& || ! 位运算符& | ^ << >> 赋值运算符= += -= *= /= %= <<= >>= &= |= ^= 特殊运算符& //&a 返回变量a的地址 * //*a 是一个指针变量 条件语句除了 循环语句for a := 0; a < 10; a++ { fmt.Printf("a 的值为: %dn",a) } //像while一样 var a,b int = 1,3 for a < b { a++ fmt.Printf("a 的值为: %dn",a) } //也能这么用...有意思 numbers := [6]int{1,2,3,5} for i,x := range numbers { fmt.Printf("第 %d 位 x 的值 = %dn",i,x) } //还有goto //明天接着看 2018.1.29 接着熟悉语法 函数Go 语言最少有个 函数定义func fname( [params list] ) [return_types] { //函数体 } 比如: func max(num1 int,num2 int) int { if num1 > num2 { return num1 } return num2 } // num1和num2都是int类型 func max(num1,num2 int) int { if num1 > num2 { return num1 } return num2 } // 返回多个值 func test(num1,num2 int) (int,int) { return num2,num1 } //需注意参数值传递和引用传递,可传递指针 func test(x int,y int) { var tmp = x x = y y = tmp } //可传递指针 func test(x *int,y *int) { var tmp = *x *x = *y *y = tmp } 变量作用域
数组
var v_name [SIZE] v_type var balance [10] int 初始化//初始化数组中 {} 中的元素个数不能大于 [] 中的数字 var nums = [5]int{1,4,5} //如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小 var nums = [...]int{1,3} //exp func main() { var nums = [3]int{1,3} fmt.Println(nums) var y [10]int for i := 0; i < 10; i++ { y[i] = i + 1 } fmt.Println(y) } 指针Go 语言的取地址符是 & var x = 3 fmt.Println(&x) //0xc4200160b8 //声明指针 var x *int //在指针类型前面加上 * 号(前缀)来获取指针所指向的内容 var x = 3 var pt = &x //0xc4200160b8 fmt.Println(*pt) //3
var x *int //nil 2018.2.1继续 Struct结构体
例如: type Books struct { id int title string author string subject string } 如果要访问结构体成员,需要使用点号 (.) 操作符,格式为:"结构体.成员名" var book1 Books book1.id = 1 book1.author = "go" printStructAttr(book1) func printStructAttr(book Books) { fmt.Println(book.author) } //指针 var struct_pointer *Books var book1Pt *Books book1Pt = &book1 fmt.Println(book1Pt.author) Slice切片数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
var slice []int slice = append(slice,3) slice = append(slice,5,6) fmt.Println(slice) //Exp. var arr = [3]int{1,3} s := arr[:] fmt.Println(s) //[1 2 3] s = append(s,5) fmt.Println(s) //[1 2 3 5] t := s[1:3] fmt.Println(t) //[2 3] //使用make()函数来创建切片 var slice1 []type = make([]type,len,capacity) //len() cap() var numbers = make([]int,7) fmt.Println(numbers) //[0 0 0] fmt.Println(len(numbers)) //3 fmt.Println(cap(numbers)) //7 //下面这个很有意思 numbers = append(numbers,6,7,8,9,10) fmt.Println(numbers) //[0 0 0 6 7 8 9 10] fmt.Println(len(numbers)) //8 fmt.Println(cap(numbers)) //14 有待研究 Map一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。 //声明 var map_name map[key_type]val_type //默认 map 是 nil //使用make()初始化 map_name = make(map[string]string) //直接使用make() map_name := make(map[string]string) //赋值 var countryCapitalMap map[string]string countryCapitalMap = make(map[string]string) countryCapitalMap["France"] = "Paris" captial,ok := countryCapitalMap["France"] fmt.Println(captial) fmt.Println(ok) //遍历 for country := range countryCapitalMap { fmt.Println("Capital of",country,"is",countryCapitalMap[country]) } //delete() delete(countryCapitalMap,"France") 接口把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。 type interface_name interface { method_name1 [return_type] method_name2 [return_type] method_name3 [return_type] ... method_namen [return_type] } type struct_name struct { /* variables */ } func (struct_name_variable struct_name) method_name1() [return_type] { /* 方法实现 */ } Exp. type Phone interface { call(int) string } type IPhone struct { } func (iPhone IPhone) call(nums int) string { fmt.Println("iphone call",nums) return "iphone" } func main() { var phone Phone phone = new(IPhone) var phoneName = phone.call(123) fmt.Println(phoneName) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |