GO 语言精准入门

    科技2022-08-28  108

    目录

    一、变量

    1、语法:var 变量名称 变量类型

    2、如果定义变量的时候没有进行初始化,会使用默认初始值

    3、初始化声明 :=,下面两个方式是等价的

    4、因式分解关键字写法(一般用于全局变量)

    二、常量

    1、语法:const 常量名称 常量类型

    2、特殊的常量iota

    三、运算符

    四、基本逻辑语句

    1、条件语句

    2、循环语句

    五、函数

    1、语法

    2、和C++的不同之处

    3、注意点

    4、闭包

    5、方法


     

    一、变量

    1、语法:var 变量名称 变量类型

    var str string = "pfei" var a, b int = 1, 2 var mark bool // 默认false

    2、如果定义变量的时候没有进行初始化,会使用默认初始值

    数值类型 0 布尔类型 false 字符串 “” 以下类型为nil: var a *int var a []int var a map[string] int var a chan int var a func(string) int var a error // error 是接口

    3、初始化声明 :=,下面两个方式是等价的

    var f string = "pfei" f := "pfei"

    4、因式分解关键字写法(一般用于全局变量)

    var( a int b bool c float )

    局部变量一旦被声明必须被使用,但是全局变量可以不被使用。

    二、常量

    在程序运行的时候不会被修改的量。

    1、语法:const 常量名称 常量类型

    // 显式定义 const s string = "pfei" // 隐式定义 const s = "pfei" //用于枚举 const ( unknown = 0 female = 1 male = 2 )

    2、特殊的常量iota

    可以被编译器修改的常量,iota在const关键字出现的时候被重置为0(const内部的第一行之前)const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

    用法(1) 枚举值

    const( a = itoa b c ) // 输出为 0 1 2

    用法(2)

    const( a = itoa b c d = "pfei" e f = 100 g h = itoa i ) // 输出结果为 0 1 2 pfei pfei 100 100 7 8

    用法(3)

    const( i=1<<iota j=3<<iota // 3左移一位 k // 3左移两位 l // 3左移三位 ) // 输出结果 1 6 12 24

    注意:当变量没有给值的时候就用上一个变量使用的值,然后运算的时候iota常量会自加1。

    三、运算符

    1、算数运算符

    +、-、*、/、%、++、--

    2、关系运算符

    ==、!=、>、<、>=、<=

    3、逻辑运算符

    &&、||、!

    4、位运算符

    &、|、^(异或)、<<、>>

    5、运算符也可以像C++一样用于赋值符号的左侧,表示先运算再赋值,例如:*=、<<=、&=

    6、其他运算符

    & 返回变量地址

    * 指针变量

    四、基本逻辑语句

    1、条件语句

    ifif...elseif嵌套switchselect

    样例:

    // if if 布尔表达式{ ... } // if...else,注意此处else的位置,放到其他地方报错 if 布尔表达式{ ... }else{ ... ) //switch switch var0{ case var1: ... case var2: ... default: ... } // type switch switch i := x.(type) { case nil: fmt.Printf(" x 的类型 :%T",i) case int: fmt.Printf("x 是 int 型") case float64: fmt.Printf("x 是 float64 型") case func(int) float64: fmt.Printf("x 是 func(int) 型") case bool, string: fmt.Printf("x 是 bool 或 string 型" ) default: fmt.Printf("未知型") } // 通过fallthrough语句来强制执行下一个case var v bool = false switch v{ case false: fmt.Println("1、case 条件语句为 false") fallthrough case true: fmt.Println("2、case 条件语句为 true") fallthrough case false: fmt.Println("3、case 条件语句为 false") fallthrough case true: fmt.Println("4、case 条件语句为 true") case false: fmt.Println("5、case 条件语句为 false") fallthrough default: fmt.Println("6、默认 case") } // select后补

    2、循环语句

    for i := 0; i <= 10; i++for // 无限循环for i, x := range numbers

    样例:

    numbers := [6]int {1, 2, 3, 5} for i, x := range numbers{ fmt.Println("第%d位x的值=%d\n", i, x) }

    goto语句

    var a int = 10 /* 循环 */ LOOP: for a < 20 { if a == 15 { /* 跳过迭代 */ a = a + 1 goto LOOP } fmt.Printf("a的值为 : %d\n", a) a++ }

    五、函数

    1、语法

    func 函数名称(参数列表) 返回值类型{ ... }

    2、和C++的不同之处

    返回值类型写在后面,而不是函数名之前(创新点???)GO函数可以返回多个返回值

    3、注意点

    值传递:不影响实际参数引用传递:func swap(a *int, b *int){}

    4、闭包

    // 注意此处ff是一个匿名函数,所以每次调用会自加一次1 func add() func() int{ var i int = 0 return func() int{ i += 1 return i } } func main(){ ff := add() fmt.Println(ff()) fmt.Println(ff()) }

    5、方法

    方法:就是结构体或者类中实现功能的函数,java中就只有函数

    函数:实现某些功能,不用放到类或者结构体中

    定义语法:func (变量名 变量类型) 函数名(参数) 返回值类型 {}

    package main import ( "fmt" ) /* 定义结构体 */ type Circle struct { radius float64 } //该 method 属于 Circle 类型对象中的方法 func (c Circle) getArea() float64 { //c.radius 即为 Circle 类型对象中的属性 return 3.14 * c.radius * c.radius } func main() { var c1 Circle c1.radius = 10.00 fmt.Println("圆的面积 = ", c1.getArea()) }

     

    Processed: 0.010, SQL: 9