选题方向:后端实践课题 选题题目:Go语言入门指南:基础语法与常用特性解析 选题目的:为了了解go语言和java语言的共性和区别,在了解java语言的基础上更加深入的了解go语言 go语言的特性:
- 语法简单,高效,简洁
- 拥有垃圾回收机制
- 天然支持高并发,内置并发支持
- 拥有强大的标准库
- 跟Java一样可以跨平台编辑 go语言的基础语法:
HelloWorld
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
关键字解释:
- package :来支持代码模块化和代码复用,用来指定当前的包名,必须要有一个main包,表示一个可独立运行的程序
- import:用来导入其他的包(package)的关键字,import后面可以接圆括号,将导入的所有的包括在里面
- func main() 程序的入口 常用的fmt函数和用法如下:
- fmt.Print:打印输入内容
- fmt.Println:打印输入的内容并换行
- fmt.Scan:从控制台读入一个值
这里附上Java代码
public class Main{
public static void main(String[] args) {
System.out.println("hello world");
}
}
var
变量
var + 变量名 + 变量类型 go语言不需要具体的去声明变量是什么类型,因为他会自动去为它解析成他的类型,这跟java语言很不一样
//java语言的写法
int a = 10
//go语言的写法
var a = 10 //第一种写法
a := 10//第二种写法
//声明变量啊的类型
var a int
//然后赋值
a = 10 //第三种写法
由此可见,go语言在编写程序的时候更加注重的内容,语言的语法更加的灵活,没有那么多的格式去限制我们去写程序
for
值得一提的是,go语言里只有for这一个循环,像java语言的while循环和do while循环都没有,这里也体现了go语言的简洁性
package main
import "fmt"
func main() {
//程序的死循环
for {
fmt.Println("hello")
break
}
//程序的普通循环
for i := 0; i < 10; i++ {
fmt.Println(i)
}
//程序的while循环
i := 1
for i <= 2 {
fmt.Println(i)
i++
}
}
我们可以看到go语言的格式,go语言的for循环条件内部不需要括号包括,严格的指定了格式,并且左大括号必须在当前行,严格的指定了go语言的书写规范,使得go语言能够让更多的人了解和学习,让学习成本更加的低。
for range 在go语言中,for range是一种特殊的for循环形式,用于遍历数组,切片,映射和通道等数据结构 for range 的语法如下
for 索引,值:range 表达式 {
//循环执行的代码块
}
其中,
- "索引"是当前元素的索引或键
- "值"是当前元素的值
- "表达式"时要迭代的数据结构 这里附上Java代码
public class Main{
public static void main(String[] args) {
while(true){
System.out.println("hello");
break;
}
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
int i = 1;
while(i <=2){
System.out.println(i);
i++;
}
}
}
if
package main
import "fmt"
func main() {
if 7%2 == 0 {
fmt.Println("7是偶数")
} else {
fmt.Println("7是奇数")
}
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
go语言的if语句跟java语句大差不差
这里附上Java代码
public class Main{
public static void main(String[] args) {
if (7 % 2 == 0) {
System.out.println("7是偶数");
} else {
System.out.println("7是奇数");
}
}
}
switch
go语言代码展示
package main
import (
"fmt"
)
func main() {
a := 2
switch a {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
case 3:
fmt.Println("3")
case 4, 5:
fmt.Println("4或者5")
default:
fmt.Println("other")
}
}
java代码展示
public class Main{
public static void main(String[] args) {
int a = 2;
switch (a){
case 1 :
System.out.println("1");
case 2:
System.out.println("2");
case 3:
System.out.println("3");
case 4,5:
System.out.println("4或者5");
default:
System.out.println("other");
}
}
}
array
go语言代码
package main
import (
"fmt"
)
func main() {
var a [5]int
a[4] = 100
fmt.Println(a[0])
fmt.Println(a[4])
b := [5]int{1, 2, 3, 4, 5}
fmt.Println(b)
}
java语言代码
public class Main{
public static void main(String[] args) {
int[] a = new int[5];
a[4] = 100;
System.out.println(a[0]);
System.out.println(a[4]);
int[] b = new int[]{1, 2, 3, 4, 5};
System.out.println(b.toString());
}
}
go语言的数组跟他的变量一样,数值的赋值和引用也和其他语言中的一样 值得一提的是,go语言打印数组只需要将他的变量名放入打印语句就可以了,默认打印的就是数组的值,但是java代码默认打印的是数组的地址,需要改写数组的toString函数才可以答应数组的值
我们可以看出,java代码和go语言的代码的区别就在于switch后面有没有括号
slice
go语言代码
package main
import "fmt"
func main() {
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
//答应数组第三个位置上的数值
fmt.Println(s[2])
//答应数组的长度
fmt.Println(len(s))
}
java语言代码
import java.util.ArrayList;
import java.util.List;
public class Main{
public static void main(String[] args) {
List<String> list = new ArrayList<>(3);
list.add(0, "a");
list.add(1, "b");
list.add(2, "c");
System.out.println(list.get(2));
System.out.println(list.size());
}
}
go语言的切片类型slice跟数组十分相似,操作步骤几乎一致,本质上来讲切片就是一个动态数组,要注意的是创建切片的时候要使用关键字make(),后面接收两个参数,第一个是数值类型,第二个是切片的大小。
数据类型
- 整数类型(int)
- 浮点数类型(float)
- 布尔类型(bool)
- 指针类型
- 字符类型
- 字符串类型(string)
- 数组类型
- 切片类型
- 结构体类型
- 映射类型
与java语言有较大的不同的是:go语言具有指针类型,切片类型,结构体类型,映射类型,其中结构体类型和指针类型相似,但是也有一些差别(go语言的指针不能够进行偏移和运算,是安全指针)