GO 语言基础语法一 (快速入门 Go 语言)

一. golang 标识符,关键字,命名规则

在这里插入图片描述

二. golang 变量

在这里插入图片描述

三. golang 常量

在这里插入图片描述

四. golang 数据类型

在这里插入图片描述

五. golang 布尔类型

在这里插入图片描述

六. golang 数字类型

在这里插入图片描述

七. golang 字符串

1. go语言字符串字面量

在Go语言中,字符串字面量使用双引号 “” 或者反引号 ’ 来创建。双引号用来创建可解析的字符串,支持转义,但不能用来引用多行;反引号用来创建原生的字符串字面量,可能由多行组成,但不支持转义,并且可以包含除了反引号外其他所有字符。双引号创建可解析的字符串应用最广泛,反引号用来创建原生的字符串则多用于书写多行消息,HTML以及正则表达式。

package main

import (
	"fmt"
)

func main() {

	var s1 string = "hello world"

	var s2 string = `
		<html>
			<head><title> hello world </title>
		</html>
	
	`

	fmt.Printf("s1: %v\n", s1)
	fmt.Printf("s2: %v\n", s2)
}

运行结果

s1: hello world
s2: 
                <html>
                        <head><title> hello world </title>
                </html>

2. go语言字符串连接

(1). 使用加号

package main

import (
	"fmt"
)

func main() {

	name := "lyp"
	age := "20"
	msg := name + " is " + age

	fmt.Printf("msg: %v\n", msg)

	msg = ""
	msg += name
	msg += " is "
	msg += age

	fmt.Printf("msg: %v\n", msg)

}

运行结果

msg: lyp is 20
msg: lyp is 20

(2). 使用 fmt.Sprintf() 函数

package main

import (
	"fmt"
)

func main() {

	name := "lyp"
	age := "20"
	msg := fmt.Sprintf("%s is %s", name, age)

	fmt.Printf("msg: %v\n", msg)

}

运行结果

msg: lyp is 20

(3). strings.Join()

package main

import (
	"fmt"
	"strings"
)

func main() {

	name := "lyp"
	age := "20"
	msg := strings.Join([]string{name, age}, " is ")

	fmt.Printf("msg: %v\n", msg)

}

运行结果

msg: lyp is 20

(4). buffer.WriteString()

package main

import (
	"bytes"
	"fmt"
)

func main() {

	var buffer bytes.Buffer
	buffer.WriteString("lyp")
	buffer.WriteString(" is ")
	buffer.WriteString("20")

	fmt.Printf("buffer.String(): %v\n", buffer.String())

}

运行结果

buffer.String(): lyp is 20

3. go语言字符串转义字符

Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示
在这里插入图片描述

package main

import "fmt"

func main() {

	fmt.Printf("hello\tworld\n")

	fmt.Printf("\"c:\\test\\\"")

}

运行结果

hello   world
"c:\test\"

4. go语言字符串切片操作

package main

import "fmt"

func main() {

	str := "hello world"
	n := 3
	m := 5

	fmt.Println(str[n])   //获取字符串索引位置为n的原始字节
	fmt.Println(str[n:m]) //截取得字符串索引位置为 n 到 m-1 的字符串
	fmt.Println(str[n:])  //截取得字符串索引位置为 n 到 len(s)-1 的字符串
	fmt.Println(str[:m])  //截取得字符串索引位置为 0 到 m-1 的字符串

}

运行结果

108
lo
lo world
hello

5. go语言字符串常用方法

在这里插入图片描述

package main

import (
	"fmt"
	"strings"
)

func main() {
	s := "hello world!"
	fmt.Printf("len(s): %v\n", len(s))
	fmt.Printf("strings.Split(s, \"\"): %v\n", strings.Split(s, " "))
	fmt.Printf("strings.Contains(s, \"hello\"): %v\n", strings.Contains(s, "hello"))
	fmt.Printf("strings.HasPrefix(s, \"hello\"): %v\n", strings.HasPrefix(s, "hello"))
	fmt.Printf("strings.HasSuffix(s, \"world!\"): %v\n", strings.HasSuffix(s, "world!"))
	fmt.Printf("strings.Index(s, \"l\"): %v\n", strings.Index(s, "l"))
	fmt.Printf("strings.LastIndex(s, \"l\"): %v\n", strings.LastIndex(s, "l"))
}

运行结果

len(s): 14
strings.Split(s, ""): [hello world!]
strings.Contains(s, "hello"): true
strings.HasPrefix(s, "hello"): true
strings.HasSuffix(s, "world!"): true
strings.Index(s, "l"): 2
strings.LastIndex(s, "l"): 9

八. golang格式化输出

在这里插入图片描述

package main

import "fmt"

type WebSite struct {
	Name string
}

func main() {
	site := WebSite{Name: "lyp"}
	fmt.Printf("site: %v\n", site)
	fmt.Printf("site: %#v\n", site)
	fmt.Printf("site: %T\n", site)

	fmt.Println("%%")

	b := true
	fmt.Printf("b: %t\n", b)

	i := 8
	fmt.Printf("i: %v\n", i)
	fmt.Printf("i: %b\n", i)

	i = 96
	fmt.Printf("i: %c\n", i)
	fmt.Printf("i: %x\n", i)

	x := 100
	p := &x
	fmt.Printf("p: %v\n", p)

}

运行结果

site: {lyp}
site: main.WebSite{Name:"lyp"}
site: main.WebSite
%%
b: true
i: 8
i: 1000
i: `
i: 60
p: 0xc000016120

九. golang运算符

1. 算术运算符

在这里插入图片描述

++(自增)和–(自减)在Go语言中是单独的语句,并不是运算符(不能用在表达式中)

package main

import "fmt"

func main() {
	a := 100
	b := 10

	fmt.Printf("(a + b): %v\n", (a + b))
	fmt.Printf("(a - b): %v\n", (a - b))
	fmt.Printf("(a * b): %v\n", (a * b))
	fmt.Printf("(a / b): %v\n", (a / b))
	fmt.Printf("(a %% b): %v\n", (a % b))

	a++
	fmt.Printf("a: %v\n", a)
	b--
	fmt.Printf("b: %v\n", b)
}

2. 关系运算符

在这里插入图片描述

package main

import "fmt"

func main() {
	a := 1
	b := 2

	fmt.Printf("(a > b): %v\n", (a > b))
	fmt.Printf("(a < b): %v\n", (a < b))
	fmt.Printf("(a >= b): %v\n", (a >= b))
	fmt.Printf("(a <= b): %v\n", (a <= b))
	fmt.Printf("(a == b): %v\n", (a == b))
	fmt.Printf("(a != b): %v\n", (a != b))
}

3. 逻辑运算符

在这里插入图片描述

package main

import "fmt"

func main() {
	a := true
	b := false

	fmt.Printf("(a && b): %v\n", (a && b))
	fmt.Printf("(a || b): %v\n", (a || b))
	fmt.Printf("(!a): %v\n", (!a))
	fmt.Printf("(!b): %v\n", (!b))
}

4. 位运算符

在这里插入图片描述

package main

import "fmt"

func main() {
	a := 4 // 二进制 100
	fmt.Printf("a: %b\n", a)
	b := 8 // 二进制 1000
	fmt.Printf("b: %b\n", b)

	fmt.Printf("(a & b): %v, %b \n", (a & b), (a & b))
	fmt.Printf("(a | b): %v, %b\n", (a | b), (a | b))
	fmt.Printf("(a ^ b): %v, %b\n", (a ^ b), (a ^ b))
	fmt.Printf("(a << 2): %v, %b\n", (a << 2), (a << 2))
	fmt.Printf("(b >> 2): %v, %b\n", (b >> 2), (b >> 2))
}

5. 赋值运算符

在这里插入图片描述

package main

import "fmt"

func main() {
	var a int
	a = 100
	fmt.Printf("a: %v\n", a)
	a += 1 // a = a + 1
	fmt.Printf("a: %v\n", a)
	a -= 1 // a = a -1
	fmt.Printf("a: %v\n", a)
	a *= 2 // a = a * 2
	fmt.Printf("a: %v\n", a)
	a /= 2 // a = a / 2
	fmt.Printf("a: %v\n", a)
}

十. golang流程控制

1. if 语句

if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
}

(1). 不需使用括号将条件包含起来
(2). 大括号{}必须存在,即使只有一行语句
(3). 左括号必须在if或else的同一行
(4). 在if之后,条件语句之前,可以添加变量初始化语句,使用;进行分隔
(5). 不能使用0或非0表示真假

func test3() {
	if age := 20; age > 18 {
		fmt.Println("你是成年人")
	}
	fmt.Printf("程序运行结束")
}

func main() {
	// test1()
	// test2()
	test3()
}
func test4() {
	var i = 1
	if i { // 编译失败
		fmt.Println("here")
	}
	fmt.Printf("程序运行结束")
}

2. if else 语句

if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
} else {
  /* 在布尔表达式为 false 时执行 */
}
func f2() {
	var s int
	fmt.Println("输入一个数字:")
	fmt.Scan(&s)

	if s%2 == 0 {
		fmt.Print("s 是偶数\n")
	} else {
		fmt.Print("s 不是偶数\n")
	}
	fmt.Print("s 的值是:", s)
}

3. if else if 语句

if 布尔表达式1 {
    // do something
} else if 布尔表达式2 {
    // do something else
}else {
    // catch-all or default
}
func f5() {
	if score := 80; score >= 60 && score <= 70 {
		fmt.Println("C")
	} else if score > 70 && score <= 90 {
		fmt.Println("B")
	} else {
		fmt.Println("A")
	}
}

4. 嵌套 if 语句

if 布尔表达式 1 {
   /* 在布尔表达式 1 为 true 时执行 */
   if 布尔表达式 2 {
      /* 在布尔表达式 2 为 true 时执行 */
   }
}
func f2() {
	// 判断男女生及年龄
	gender := "女生"
	age := 16
	if gender == "男生" {
		fmt.Println("男生")
		if age > 18 {
			fmt.Println("成年")
		} else {
			fmt.Println("未成年")
		}
	} else {
		fmt.Println("女生")
		if age > 18 {
			fmt.Println("成年")
		} else {
			fmt.Println("未成年")
		}
	}
}

4. switch语句

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}
func f() {
	grade := "A"
	switch grade {
	case "A":
		fmt.Println("优秀")
	case "B":
		fmt.Println("良好")
	default:
		fmt.Println("一般")
	}
}

多条件匹配

func f() {
	day := 3
	switch day {
	case 1, 2, 3, 4, 5:
		fmt.Println("工作日")
	case 6, 7:
		fmt.Println("休息日")
	}
}

case 可以是条件表达式

func f() {
	score := 90
	switch {
	case score >= 90:
		fmt.Println("享受假期")
	case score < 90 && score >= 80:
		fmt.Println("好好学习吧!")
	default:
		fmt.Println("玩命学习!")
	}
}

fallthrough 强制执行后面的一个 case 代码
fallthrough 不能用在switch的最后一个分支

switch {
    case false:
        fmt.Println("The integer was <= 4")
        fallthrough
    case true:
        fmt.Println("The integer was <= 5")
        fallthrough
    case false:
        fmt.Println("The integer was <= 6")
        fallthrough
    case true:
        fmt.Println("The integer was <= 7")
        fallthrough
    case false:
        fmt.Println("The integer was <= 8")
    default:
        fmt.Println("default case")
}

5. for 循环语句

go语言中的 for 循环,只有 for 关键字,去除了像其他语言中的 while 和 do while

for 初始语句;条件表达式;结束语句{
    循环体语句
}
func f() {
	for i := 1; i <= 10; i++ {
		fmt.Printf("i: %v\n", i)
	}
}

func f() {
	i := 1
	for ; i <= 10; i++ {
		fmt.Printf("i: %v\n", i)
	}
}

func f() {
	i := 1 // 初始条件
	for i <= 10 {
		fmt.Printf("i: %v\n", i)
		i++ // 结束条件
	}
}

for循环可以通过 break goto return panic 语句强制退出循环。

6. for range 循环语句

Go语言中可以使用 for range 遍历数组、切片、字符串、map 及通道(channel)。通过for range遍历的返回值有以下规律

1.数组、切片、字符串返回索引和值。
2.map返回建和值。
3.通道(channel)只返回通道内的值。

// 循环数组
func f() {
	var a = [5]int{1, 2, 3, 4, 5}
	for i, v := range a {
		fmt.Printf("i: %d, v: %v\n", i, v)
	}
}

func main() {
	f()
}

// 循环字符串
func f() {
	var s = "多课网,go教程"
	for i, v := range s {
		fmt.Printf("i: %d, v: %c\n", i, v)
	}
	// %c 按照字符输出
}

func main() {
	f()
}

// 循环切片
func f() {
	var s = []int{1, 2, 3, 4, 5}
	for i, v := range s {
		fmt.Printf("i, %d, v: %v\n", i, v)
	}
}

func main() {
	f()
}

// 循环 map
func f() {
	m := make(map[string]string)
	m["name"] = "tom"
	m["age"] = "20"
	m["email"] = "tom@gmail.com"
	for k, v := range m {
		fmt.Printf("k: %v, v: %v\n", k, v)
	}
}

func main() {
	f()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ESRI Land Cover 2020是一种专业级遥感数据产品,由ESRI公司开发并更新的。该数据集提供了全球范围内土地覆盖变化的详细信息,并针对不同地区和不同时间段提供了多个版本的数据。 ESRI Land Cover 2020的主要目的是帮助用户了解和分析土地覆盖及其变化对环境和社会经济的影响。该数据集可以用于许多领域的研究和应用,包括城市规划、环境管理、生态学研究和自然资源管理等。 ESRI Land Cover 2020基于卫星遥感数据和地面调查数据,并借助先进的图像处理技术进行分类和解译。它将土地覆盖划分为多个类别,如森林、草地、农田、城市、湿地等,每个类别都有各自的特征和属性。 ESRI Land Cover 2020提供了高分辨率的数据,可以解析到更小的地物细节,有助于更准确地识别和分析土地覆盖的变化。同时,ESRI Land Cover还提供了多个时间段的数据,可以对土地覆盖变化进行长期跟踪和比较。 ESRI Land Cover 2020还具有快速查询和分析功能,用户可以通过GIS软件访问和使用这些数据。该数据集还提供了与其他ESRI产品和服务的兼容性,如ArcGIS平台和ArcMap软件,以便用户进行更深入的分析和可视化。 总之,ESRI Land Cover 2020是一种强大的土地覆盖数据产品,提供全球范围内的土地覆盖信息和变化趋势,对于环境和资源管理、规划和决策等方面具有重要的应用价值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值