0.Go的安装和基本语法

0.安装

0.1.下载安装包

https://golang.google.cn/dl/

linux下载go1.Xxx.Yyy.linux-amd64.tar.gz版本安装包

0.2.解压

bash 复制代码
tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz

0.3.安装

修改/etc/profile文件, 添加一行

bash 复制代码
export PATH=$PATH:/usr/local/go/bin

或者修改~/.bash_profile文件也是可以的

刷新资源文件

bash 复制代码
source /etc/profile

1.基本入门

go 复制代码
package main
import "fmt"

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

main方法为项目的起始方法

2.简单语法

2.1.init方法

go 复制代码
package main
import "fmt"

func init() {
	fmt.Println("Init~~")
}

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

打印结果:

Init~~
Hello World, Go!

init方法优先于main方法执行。

2.2.字符串

2.2.1.字符串打印

go 复制代码
func test1() {
	fmt.Println("test1--->", "Hello, World!")
}

2.2.2.字符串和数字拼接

go 复制代码
func test3() {
	var a string = "123456"
	d := fmt.Sprint(a, 54321)
	fmt.Println("test3--->", d)
}

2.3.多变量赋值

2.3.1.成员变量

go 复制代码
var e , f = 1, "321"

func test4() {
	fmt.Println("test4--->", e, f)
}

2.3.2.局部变量

go 复制代码
func test5() {
	g, h := 3, "333"
	fmt.Println("test5--->", g, h)
}

2.4.常量

go 复制代码
func test6() {
	const i = 100
	fmt.Println("test6--->", i)
}

2.5.基本运算

go 复制代码
func test7() {
	j := 15
	k := 10
	fmt.Println("test7(+)--->", j + k)
	fmt.Println("test7(-)--->", j - k)
	fmt.Println("test7(*)--->", j * k)
	fmt.Println("test7(/)--->", j / k)
	fmt.Println("test7(%)--->", j % k)
	j++
	fmt.Println("test7(++)--->", j)
	k--
	fmt.Println("test7(--)--->", k)
}

2.6.判断相等

go 复制代码
func test8() {
	m := 10
	n := 10
	o := 11
	if (m == n) {
		fmt.Println("test8--->", "等于")
	}
	if (m != o) {
		fmt.Println("test8--->", "不等于")
	}
}

2.7.或与判断

go 复制代码
func test9() {
	p := true
	q := false
	if (p && q) {
		fmt.Println("test9--->", "and true")
	} else {
		fmt.Println("test9--->", "and false")
	}
	if (p || q) {
		fmt.Println("test9--->", "or true")
	} else {
		fmt.Println("test9--->", "or false")
	}

	if (!(p || q)) {
		fmt.Println("test9--->", "not true")
	} else {
		fmt.Println("test9--->", "not false")
	}
}

2.8.数据类型

2.8.1.类型判断

go 复制代码
func test10() {
	r := 10
	s := "test"
	t := true
	fmt.Printf("test10--->r type:%T\n", r)
	fmt.Printf("test10--->s type:%T\n", s)
	fmt.Printf("test10--->t type:%T\n", t)
}

结果:

go 复制代码
test10--->r type:int
test10--->s type:string
test10--->t type:bool

2.8.2.类型转换

2.8.2.1.数字类型之间转换
go 复制代码
func test37() {
	var a int = 100
	var b int = 13
	var c float32 = float32(a) / float32(b)
	fmt.Printf("c is %f, type is %T\n", c, c)
	var d float64 = float64(a) / float64(b)
	fmt.Printf("d is %f, type is %T\n", d, d)
}

结果:

go 复制代码
c is 7.692307, type is float32
d is 7.692308, type is float64
2.8.2.2.字符串转换数字
go 复制代码
func test37() {
	var e string = "20"
	var f int
	f, _ = strconv.Atoi(e)
	fmt.Printf("f is %d, type is %T\n", f, f)
}

结果:

go 复制代码
f is 20, type is int
2.8.2.3.数字转字符串
go 复制代码
func test37() {
	g := 132
	var h string = strconv.Itoa(g)
	fmt.Printf("h is %s, type is %T\n", h, h)
}

结果:

go 复制代码
h is 132, type is string
2.8.2.4.字符串转为浮点型
go 复制代码
func test37() {
	i := "3.1415926"
	j, err := strconv.ParseFloat(i, 64)
	if err != nil {
		fmt.Println("parse string to float error, ", err)
	} else {
		fmt.Printf("j is %f, type is %T\n", j, j)
	}
}

结果:

go 复制代码
j is 3.141593, type is float64

3.语句

3.1.if...else语句

go 复制代码
func test11() {
	u := 80
	if u >= 90 {
		fmt.Println("你的成绩为优秀")
	} else if u >= 80 {
		fmt.Println("你的成绩为良")
	} else if u >= 70 {
		fmt.Println("你的成绩为一般")
	} else if u >= 60 {
		fmt.Println("你的成绩为及格")
	} else {
		fmt.Println("你的成绩为不及格")
	}
}

3.2.switch语句

3.2.1.switch语句常规使用

go 复制代码
func test12() {
	v := 30
	switch v {
	case 10:
		fmt.Println("1--->你的成绩为10")
	case 20:
		fmt.Println("1--->你的成绩为20")
	case 30:
		fmt.Println("1--->你的成绩为30")
	}
	w := 100
	switch {
	case v == 20, w == 100: // 或的关系
		fmt.Println("2--->你的成绩为20, 100")
	case v == 30, w == 100: // 或的关系
		fmt.Println("2--->你的成绩为30, 100")
	}

	switch {
	case v == 20 && w == 100: // 并且的关系
		fmt.Println("3--->你的成绩为20, 100")
	case v == 30 && w == 100: // 并且的关系
		fmt.Println("3--->你的成绩为30, 100")
	}

	var x interface{}

	switch x.(type) {
	case int:
		fmt.Println("x 是 int 型")
	case float64:
		fmt.Println("x 是 float64 型")
	case func(int) float64:
		fmt.Println("x 是 func(int) 型")
	case bool, string:
		fmt.Println("x 是 bool 或 string 型")
	default:
		fmt.Println("未知型")
	}
}

结果:

go 复制代码
1--->你的成绩为30
2--->你的成绩为20, 100
3--->你的成绩为30, 100
未知型

3.2.2.fallthrough语句

强制执行下一个case

go 复制代码
func test12() {
	switch {
	case false:
		fmt.Println("test 1")
		fallthrough
	case true:
		fmt.Println("test 2")
		fallthrough
	case false:
		fmt.Println("test 3")
		fallthrough
	case true:
		fmt.Println("test 4")
	case false:
		fmt.Println("test 5")
	}
}

结果:

go 复制代码
test 2
test 3
test 4

3.3.select语句

go 复制代码
package main

import (
	"fmt"
	"time"
)

func main() {
	test13()
}

func test13() {

	test1 := make(chan string)
	test2 := make(chan string)

	go func() {
		time.Sleep(1 * time.Second)
		test1 <- "one"
	}()
	go func() {
		time.Sleep(2 * time.Second)
		test2 <- "two"
	}()

	for i := 0; i < 2; i++ {
		select {
		case m1 := <-test1:
			fmt.Println("print", m1)
		case m2 := <-test2:
			fmt.Println("print", m2)
		default:
			fmt.Println("no data...")
		}
	}
}

结果:

go 复制代码
print one
print two

3.4.循环语句

3.4.1.for语句

go 复制代码
func test14() {
	for i := 0; i < 5; i++ {
		if i == 5 {
			continue
		} else if i == 8 {
			break
		}
		println(fmt.Sprint("num-", i))
	}
}

结果:

go 复制代码
num-0
num-1
num-2
num-3
num-4
num-6
num-7

3.4.2.goto跳转制定代码

go 复制代码
func test15() {
	var a int = 10
	var b bool = false

label:
	if b {
		fmt.Println("---aaa---")
	}

	for a < 20 {
		if a == 15 {
			a = a + 1
			b = true
			goto label //跳转到制定代码快
		}
		fmt.Printf("a的值为 : %d\n", a)
		a++
	}
}

结果:

go 复制代码
a's alue is : 10
a's alue is : 11
a's alue is : 12
a's alue is : 13
a's alue is : 14
---aaa---
a's alue is : 16
a's alue is : 17
a's alue is : 18
a's alue is : 19
相关推荐
也无晴也无风雨33 分钟前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
SRY122404192 小时前
javaSE面试题
java·开发语言·面试
__AtYou__3 小时前
Golang | Leetcode Golang题解之第557题反转字符串中的单词III
leetcode·golang·题解
无尽的大道3 小时前
Java 泛型详解:参数化类型的强大之处
java·开发语言
ZIM学编程3 小时前
Java基础Day-Sixteen
java·开发语言·windows
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
2401_857610034 小时前
多维视角下的知识管理:Spring Boot应用
java·spring boot·后端
一丝晨光4 小时前
编译器、IDE对C/C++新标准的支持
c语言·开发语言·c++·ide·msvc·visual studio·gcc
阮少年、4 小时前
java后台生成模拟聊天截图并返回给前端
java·开发语言·前端
代码小鑫4 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计