Go_语言入门

Hello word示例

package main // 定义包名, main声明是一个可独立执行的程序, 每个 Go 应用程序都包含一个名为 main 的包。

import "fmt" // 导入包

func main() { // 入口函数
    fmt.Println("hello word") // 调用打印方法
}

常量变量

常量 :  运行过程中不可被改变

只能修饰 布尔值, 数字(整数, 浮点数, 复数)和字符串

// 声明方式
const 标识符 [type] = value  // [] 代表可选, go语言会自动判断类型

// 示例
const b string = "hello word"
const b = "hello word"
const Pi = 3.1415936

// 简写
const(
    a = 0
    b = 1
    c = 2
    )

// 对于这种自增的, 常量声明, go内置了iota关键字, 每次出现时他的值都会变为0
const (
    a = iota // 初始值0
    b // 1
    c // 2
)

变量: 代号, 在go中可被重新赋值相同的数据类型

变量可定义为各种类型

// 声明方式1, 只声明,使用该类型的默认值
var 标识符 type

// 声明方式2,  声明且赋值, 省略var关键字, 会根据值的类型自动设置类型
var 标识符 = 值

// 声明方式3, 声明且赋值, 省略var关键字, 会根据值的类型自动设置类型
标识符 := 值

// 声明方式4, 多个同类型变量声明
var 标识符1, 标识符2 type

// 声明方式5, 多个变量声明(省略var关键字, 且可不同类型), 且赋值(接收函数的多返回值)
标识符1, 标识符2 := 值1, 值2

// 声明方式6, 多个变量声明
Var(
       a int        
       b string
)

代码示例

package main 

import "fmt"

func main() {

	var name0 string
	fmt.Println(name0) // 空串

	var name1 = "富强 民主 文明 和谐"
	fmt.Println(name1) // 富强 民主 文明 和谐

	name2 := "你好 世界"
	fmt.Println(name2) // 你好 世界

	var name3, name4 string
	fmt.Println(name3, name4) // 空串

	name5, age := "魏自由", 18
	fmt.Println(name5, age) // 魏自由 18

	var(
		name6 = "平等"
		age2 = 19
	)
	fmt.Println(name6, age2) //平等 0
}

注意事项

方法内声明变量一定要使用,否则无法通过编译
语句一定要在方法内, 像下面这种赋值存在于全局是不被允许的, 全局变量只能通过 = 来声明并且赋值

package main

var a int
a = 10

变量类型
  值类型: 基本数据类型int, float, bool, string以及数组和struct, 内存通常在栈中分配
  引用类型: 指针, slice, map, chan等, 内存通常在堆上分配.通过GC回收

变量的声明周期

在函数外部声明的变量叫做全局变量, 声明周期作用域整个包, 如果是公开的,则作用于整个程序

在函数内部声明的变量叫做局部变量, 生命周期仅限于函数

另外还有函数中代码块内的变量

package main 

import "fmt"

func main() {
	for i:=0;i<3;i++{
		fmt.Println(i)
	}
	fmt.Println(i) // 无法找到i变量
}

流程控制

条件分支

if - else if - else, 不用过多赘述, 就是多选一的关系

package main 
import "fmt"

func main() {
	var b = 66
	var a int
	fmt.Scanf("%d", &a)
	if a < b{
		fmt.Println("猜小了")
	}else if a > b{
		fmt.Println("猜大了")
	}else{
		fmt.Println("猜对了")
	}

}

switch case语句: 计算switch后的语句, 与case后的值比较.(与其他语言不同, go的switch语句默认不会穿透, 也就是说不用break, 如果要穿透就要使用关键字fallthrough)

package main
import "fmt"
func main(){
    var a int = 10
    switch a {
        case 0, 1, 2: // 特性: case多值
            fmt.Println("a = 0")
        case 10:
            fmt.Println("a = 10") // 此条打印
        default:
            fmt.Println("a is equal default")
    }
}

穿透示例(只会穿透到下一个执行, 如果下一个没有穿透就会终止)

package main

import "fmt"

func main(){
	var a int = 0
	switch a {
	case 0, 1, 2: // 多值
		fmt.Println("a = 0") // 打印
		fallthrough
	case 10:
		fmt.Println("a = 10") // 打印
	default:
		fmt.Println("a is equal default")
	}
}

另一个特性: case 条件

var i = 0
switch {
    case i > 0 && i < 10:
        fmt.Println("0-10")
    case i >= 10 && i<20:
        fmt.Println("10-20")
}

goto:  最好不要去使用

package main

import "fmt"

func main(){
	var age int
gotolabel:  //标识符: 定义了一个位置
	fmt.Printf("未满18周岁禁止访问!\n");
	fmt.Printf("请输入你的年龄:\n");
	fmt.Scanf("%d", &age);
	if (age < 18) {
		goto gotolabel;  //跳转到gotolabel
	}else {
		fmt.Printf("正在进入!\n");
	}
}

  

循环语句

go语言只提供了for循环这一种用法, 以及for range去遍历容器类型

经典for循环

/*
for 初始操作; 结束条件; 每次的操作{
    代码块
}
*/

package main

import "fmt"

func main(){
	for i:= 0; i<10;i++{
		fmt.Println(i)
	}
}

break : 循环终止

continue : 不再执行后面的代码, 执行结束操作再从头开始

示例:

package main

import "fmt"

func main(){
	for i:= 0; i<10;i++{
		if i==7{
			continue
		}
		fmt.Println(i)
	}
}

for range

package main

import "fmt"

func main(){
	str := "hello world"
	for i, v := range str{ // i 索引, v unicode
		fmt.Println(i, v, string(v))
	}
}

  

 

posted @ 2018-09-08 12:42  瓜田月夜  阅读(127)  评论(0)    收藏  举报