golang学习之第一天

    技术2022-07-21  69

    第一天

    包 package

    包名(name)与文件夹名可以不相同,但是尽量把持相同同一个文件夹下的文件只能有一个包名,否则编译报错main函数只能在main包下,否则报错:‘go run: cannot run non-main package‘

    变量

    三种声明方式:

    var v_name v_type,var v_name v_type = value.var v_name;v_name :=

    默认值:

    数值类型(包括complex64/128)为 0

    布尔类型为 false

    字符串为 “”(空字符串)

    以下几种类型为 nil:

    *int[]intmap[string] intchan intfunc(string) interror // error 是接口

    注意:

    := 赋值语句只能在函数(方法)体中使用函数(方法)体中定义的变量必须使用

    提示:

    交换值: a,b = b,a多变量复制: a,b,c = 1,true,“string”空白标识符"_"也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。 空标识符_使用: package main import "fmt" func main() { _,numb,strs := numbers() //只获取函数返回值的后两个 fmt.Println(numb,strs) } //一个可以返回多个值的函数 func numbers()(int,int,string){ a , b , c := 1 , 2 , "str" return a,b,c } //输出结果:2 str

    常量

    定义方式

    显式类型定义: const b string = “abc”隐式类型定义: const b = “abc”

    iota常量,可以认为是一个可以被编译器修改的常量(记录的是常量的个数)。代码中只能读取值

    常量用作枚举:

    const ( a = iota b //没有赋值的将会使用前一个常量的赋值方式,即b=iota c )

    循环

    go中没有where循环无限循环: for{} 只有一个循环条件的循环: var i int for i <= 10 { i++ }

    *Go语言的 for 循环同样支持 continue 和 break 来控制循环,但是它提供了一个更高级的 break,可以选择中断哪一个循环

    JLoop: for j := 0; j < 5; j++ { fmt.Println(j) for i := 0; i < 10; i++ { if i > 5 { break JLoop //break 语句终止的是 JLoop 标签处的外层循环。此处的的j所在的循环 } fmt.Println(i) } } 注意: 左花括号{必须与 for 处于同一行。

    switch case语句

    go中case 与 case 之间是独立的代码块,不需要通过 break 语句跳出当前 case 代码块以避免执行到下一行,示例代码如下: var a = "hello" switch a { case "hello": fmt.Println(1) case "world": fmt.Println(2) default: fmt.Println(0) } 一分支多值 var a = "mum" switch a { case "mum", "daddy": mt.Println("family") } 分支表达式 var r int = 11 switch { case r > 10 && r < 20: fmt.Println(r) } 跨越 case 的 fallthrough var s = "hello" switch { case s == "hello": fmt.Println("hello") fallthrough case s != "world": fmt.Println("world") }

    函数

    func function_name( [parameter list] ) [return_types list] { 函数体 }

    函数可以有多个返回值,都需要在返回值类型中声明类型

    传递值,不会改变源字符串的值

    package main import "fmt" func main() { str := "abc" reverse(str) fmt.Println(str) } func reverse(str string){ str = "cba" } //输出: abc 传递引用,会改变源字符串的值 package main import "fmt" func main() { str := "abc" reverse(&str) fmt.Println(str) } func reverse(str *string){ *str = "cba" } //输出: cba 闭包 package main import "fmt" func main() { fmt.Println(a()()) } func a() func() string { str := "ahah" b := func() string { return str } return b } 输出:ahah
    Processed: 0.013, SQL: 9