golang基础归纳
1. hello-world package main import "fmt" func main(){ fmt.Println("Hello world,Go Go!"); fmt.Printf("type of Hello is %Tn","Hello") } package main--每一个Go文件都应该在开头进行package name的声明(注:只有可执行程序的包名为main)。包用于代码的封装与重用,这里包名为main。位于第一行。 import "fmt"--导入fmt包,下面代码要使用。 2. 注释 单行注释:// 多行注释:/* */ 3. 空白符 _在Go中被用作空白符,可以表示任何类型的任何值。 4. 类型 布尔:bool??? // true,false 字符串:string 数字类型:int8,int16,int32,int64,int uint8,uint16,uint32,uint64,uint float32,float64 complex64,complex128 byte rune 注:int,根据不同的底层平台,表示32或64位整型。除非对整形的大小有特定的需求,否则通常应该使用int表示整型。 注:byte是uint8的别名,rune是int32的别名。 注:+操作符用于拼接字符串。 5. 类型转换 Go有着非常严格的强类型特征,没有自动类型提升或类型转换,不允许将一种类型的变量赋值给另一种类型的变量。 若要类型转换,需要显式类型装换,如int(f)等。 i := 60.5 j := 50 sum := i + float64(j) 自声明类型也不能和相同原类型混合使用: var str string = "Hello" type myString string var customName myString = "world" customName = str // 不允许 6. 格式说明符 %T:打印变量的类型 %v:打印变量的值 fmt.Printf("type of sum is %Tn",sum) 7. sizeof Go的unsafe包提供一个Sizeof函数,该函数接收变量并返回它的字节大小。unsafe包应该小心使用,因为使用unsafe包可能带来可移植性问题。 8. 变量 var name type name = initalvalue var name type = initalvalue var name = initalvalue // 类型推断 var name1,name2 type = initalvalue1,initalvalue2 var ( name1 = initalvalue1 name2 = initalvalue2 ) // 一条语句声明不同类型变量 name := initalvalue // 简短声明用:= 注:简短声明要求:=操作符左边的所有变量都要有初始值;要求:=操作符的左边至少有一个变量是尚未声明的。 注意:go语言中定义的变量必须被用到,否则会报错。 9. 常量 双引号中的任何值都是Go中的字符串常量。 无类型的常量有一个与它们相关联的默认类型,并且当且仅当一行代码需要时才提供它。在声明中? const a = 5 var intVar int = a var int32Var int32 = a var float64Var float64 = a var complex64Var complex64 = a fmt.Println("intVar",intVar,"nint32Var",int32Var,"nfloat64Var",float64Var,"ncomplex64Var",complex64Var)
10. 函数 func functionname(parametername1 type,parametername1 type) returntype { // 函数体(具体实现的功能) } 如果有连续若干个参数,它们的类型一致,那么我们无须一一罗列,只需在最后一个参数后添加该类型。 从函数中可以返回一个命名值。一旦命名了返回值,可以认为这些值在函数第一行就被声明为变量了。 func rectProps(length,width float64)(area,perimeter float64) { area = length * width perimeter = (length + width) * 2 return // 不需要明确指定返回值,默认返回 area,perimeter 的值 } 11. 包 包用于组织Go源代码,提供了更好的可重用性和可读性。 属于某一个包的源文件都应该放置于一个单独命名的文件夹里。按照 Go 的惯例,应该用包名命名该文件夹。 导出名字 在 Go 中,任何以大写字母开头的变量或者函数都是被导出的名字。其它包只能访问被导出的函数和变量。 init函数 所有包都可以包含一个?init?函数。init 函数不应该有任何返回值类型和参数,在我们的代码中也不能显式地调用它。init 函数的形式如下: func init() {
}
init 函数可用于执行初始化任务,也可用于在开始执行之前验证程序的正确性。 包的初始化顺序 首先初始化包级别(Package Level)的变量 紧接着调用 init 函数。包可以有多个 init 函数(在一个文件或分布于多个文件中),它们按照编译器解析它们的顺序进行调用。 如果一个包导入了另一个包,会先初始化被导入的包。尽管一个包可能会被导入多次,但是它只会被初始化一次。 空白标识符 导入了包,却不在代码中使用它,这在 Go 中是非法的。有两种处理方法: 1)错误屏蔽器。在导入包后,用空白符引用包的变量。var _ = rectangle.Area 2)导入包语句前使用空白符。_"geometry/rectangle" 12. 条件判断 if condition { } else if condition { } else { } 或 if statement; condition { } 注:else?语句应该在?if?语句的大括号?}?之后的同一行中。如果不是,编译器会不通过。 13. 循环 for是Go语言中唯一的循环语句。Go中没有while和do while循环。 for initialisation; condition; post { } 其中initialization和post可以省略,而只使用condition for i <= 10 { //semicolons are ommitted and only condition is present fmt.Printf("%d ",i) i += 2 } 若condition也省略则表示无限循环。 14. switch 基础用法和C语言相似,包含switch…case…case…default。 通过用逗号分隔,可以在一个 case 中包含多个表达式。 case 1,2,3,4,5: switch中表达式可省略。如果省略表达式,则表示这个 switch 语句等同于? num := 75 switch { // 表达式被省略了 case num >= 0 && num <= 50: fmt.Println("num is greater than 0 and less than 50") case num >= 51 && num <= 100: fmt.Println("num is greater than 51 and less than 100") case num >= 101: fmt.Println("num is greater than 100") } 在 Go 中,每执行完一个 case 后,会从 switch 语句中跳出来,不再做后续 case 的判断和执行。使用? switch num := number(); { // num is not a constant case num < 50: fmt.Printf("%d is lesser than 50n",num) fallthrough case num < 100: fmt.Printf("%d is lesser than 100n",num) fallthrough case num < 200: fmt.Printf("%d is lesser than 200",num) } fallthrough?语句应该是 case 子句的最后一个语句。如果它出现在了 case 语句的中间,编译器将会报错:fallthrough statement out of place ? 参考: 1. Go 系列教程(Golang tutorial series) go语言中文网 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |