Go语言入门基础

Go语言入门基础

本文是学校选修课程笔记

author: fengclchn@outlook.com


1.源文件

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello World!")
}

HelloWorld

  1. package声明所属包名称

    注意 一般所属包名称与所在目录名相同,main函数包名一定是main

    package main //声明所属包名称,一般所属包名称与所在目录名相同,main函数包名一定是main
    
  2. import导入标准库或第三方包

    单行导入多行导入两种方式

    //单行导入
    import "pkg1"
    import "pkg2"
    
    //多行导入
    import (
    	"fmt" //导入标准库,也可导入第三方包
        "math"
        "time"
        "eqdis/input" //eqdis为自定义工程文件名,input为自定义包名
    ) //使用小括号,各项之间没有逗号
    

    在LiteIDE里单行导入多个包时会被自动合并为多行导入格式

  3. 入口函数main函数

    • 入口函数main没有参数和返回值,如果要通过shell向main传入参数,可在os.Arg变量中保存
    • main函数必须放在main包中
    • 注意 Go语言中左大括号 ” { “ 必须和函数声明或控制结构在同一行
    • 注意 Go语句后分号可以省略,出现分号的典型位置是for循环等处
    func main() {
    	fmt.Println("Hello World!")       //直接输出
        fmt.Printf("%d+%d=%d\n", 1, 1, 2) //格式化输出
    }
    

HelloWorld2

2.变量

  • 存在以下几种声明方式
var sum int           //简单声明,默认初值为0,避免意外
var total int = 42    //声明并初始化
var label = "name"    //类型推断,不需要程序员敲进去类型,此处推断为string类型
tag := "My"           //短变量+类型推断,用于函数内部,不能作为全局变量
var c, d int = 35, 85 //可多变量一同赋值
var a,b *int          //a,b均为int型指针
  • Go语言特色
    • 类型跟在变量名后面
    • 可以类型推断,节省程序员工作
    • 短变量声明,短变量符号 ” := “注意 短变量仅用于函数内部,不能声明全局变量)
    • 多变量同时赋值

3.if语句

func main() {
	a := 3
	b := 4
	max := 0
	if a > b {
		max = a
	} else {
		max = b
	}
	fmt.Println(max)
}

if

  • 条件表达式无需括起来

  • if和else对应的语句块的大括号不能省略,哪怕只有一条语句

  • 左大括号和if/else等控制结构在同一行

  • else不能单独成行,必须和if的右大括号一起

  • if后可以添加特征值获取语句,与特征值判断用分号隔开,这是golang用 ” ; “ 的地方之一

来看一个例子

func main() {
    a := 3
	b := 4
    flag := min(b, a) //此处获取特征值,flag在上下文中都可取
	if flag == 3 {
		fmt.Println("hello")
	} else {
		fmt.Println("world")
	}
}

func min(a, b int) int {
	var min int
	if a < b {
		min = a
	} else {
		min = b
	}
	return min
}

上述main函数可以写成

func main() {
	a := 3
	b := 4
    //可以添加特征值获取语句,与特征值判断用分号隔开,这是golang用;的地方之一
	if flag := min(b, a); flag == 3 {//此处flag特征值仅可用于条件快内
		fmt.Println("hello")
	} else {
		fmt.Println("world")
	}
}

运行结果均如下
if2
如果存在第三个分支可以这样

if condition1 {
    // do something
} else if condition2 {
    // do something else
}else {
    // catch-all or default
}

4.分支语句

func main() {
	var result int
	var condition byte = 'e' //byte类型相当于C语言中的char
	switch condition {
	case 'a', 'b':
		result = 1
	case 'e':
		result = 2
	default:
		result = 0
	}
	fmt.Println(result)
}

switch

  • fall-through不再是默认行为,符合条件的语句执行完后无需再加break即可自动结束分支过程

  • 简化目标相同的分子条件,使用逗号分隔

  • 分支条件不限于整数和字符,任何有效的表达式都可以作为分支条件(如下)

switch result := calculate(); true {
case result < 0:
/* negative */
case result > 0:
/* positive */
default:
/* zero */
}
  • 注意 分支值如果省略,默认适配为真,及上述true可以去掉(如下)
switch result := calculate(); { //注意分号不能省略
/* ... */
}

5.循环

  • go中只有for循环

  • 循环条件不需要括起来

  • 使用方法如下

  1. 类似普通while循环
//相当于一般的while循环
func main() {
	x := 0
	for x < 5 {
		fmt.Println(x)
		x++
	}
}

for
2. 原始的for用法

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

for2
3. while(true)或do…while循环

func main() {
	x := 4
	for {
		fmt.Println(x)
		x--
		if x < 0 {
			break
		}
	}
}

for3
4. for…range循环

  • 可同时返回集合中的数据的索引和值
  • range右边的表达式必须是array,slice,string,map或是指向array的指针,也可以是channel
func main() {
	x := []int{100, 101, 102}
	for i, v := range x {
		fmt.Println(i, ":", v)
	}
}

forrange
再看一个例子

func main() {
	for i, v := range "Hello 世界" {
		fmt.Printf("%d,%c\n", i, v) //%c表示Unicode字符格式输出
	}
}

在这里插入图片描述

由上例可见,UTF-8中一个汉字占3B(字节)


  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值