Java转Go学习之旅 | 语法基础

语法基础

典型的 Go 文件布局

go 复制代码
package [子句]

[任何import语句]

[实际代码]

声明变量

go 复制代码
package main

import "fmt"

func main() {
	// 声明变量
	var quantity int
	var length, width float64
	var studentName string

	// 给变量赋值
	quantity = 6
	length, width = 8.17, 12.25
	studentName = "A.M"

	// 使用变量
	fmt.Println(quantity)
	fmt.Println(studentName)
	fmt.Println(length * width)
}

如果你事先知道变量的值是什么,可以在声明变量的同一行进行赋值:

go 复制代码
package main

import "fmt"

func main() {
	// 声明变量并赋值
	var quantity int = 6
	var length, width float64 = 8.17, 12.25
	var studentName string = "A.M"

	// 使用变量
	fmt.Println(quantity)
	fmt.Println(studentName)
	fmt.Println(length * width)
}

如果声明变量的同时为其赋值,通常可以在声明中省略变量类型:

go 复制代码
package main

import (
	"fmt"
	"reflect"
)

func main() {
	// 声明变量并赋值
	var quantity = 6
	var length, width = 8.17, 12.25
	var studentName = "A.M"

	// 使用变量
	fmt.Println(reflect.TypeOf(quantity))
	fmt.Println(reflect.TypeOf(studentName))
	fmt.Println(reflect.TypeOf(length))
	fmt.Println(reflect.TypeOf(width))
}

短变量声明

go 复制代码
package main

import (
	"fmt"
	"reflect"
)

func main() {
	// 声明变量并赋值
	quantity := 6
	length, width := 8.17, 12.25
	studentName := "A.M"

	// 使用变量
	fmt.Println(reflect.TypeOf(quantity))
	fmt.Println(reflect.TypeOf(studentName))
	fmt.Println(reflect.TypeOf(length))
	fmt.Println(reflect.TypeOf(width))
}
  • 不需要明确的声明变量的类型
  • 赋给变量的值的类型成为该变量的类型

命名规则

Go 简单的规则

  • 名称必须以字母开头,并且可以有任意数量的额外的字母和数字
  • 只有名称是以大写字母开头的变量、函数或类型才被认为是可导出的:可以从当前包之外的包访问 【这就是为什么fmt.Println中的P是大写的】
  • 命名通常采用驼峰命名,例如topPriceRetryConnection

类型转换

go 复制代码
package main

import (
	"fmt"
	"reflect"
)

func main() {
	// 声明变量并赋值
	var quantity int = 6
	// 将quantity转换成float64类型
	var res = float64(quantity)
	
	// 使用变量
	fmt.Println(quantity)
	fmt.Println(reflect.TypeOf(quantity))
	fmt.Println(res)
	fmt.Println(reflect.TypeOf(res))
}
相关推荐
傍晚冰川11 分钟前
FreeRTOS任务调度过程vTaskStartScheduler()&任务设计和划分
开发语言·笔记·stm32·单片机·嵌入式硬件·学习
黄雪超14 分钟前
JVM——打开JVM后门的钥匙:反射机制
java·开发语言·jvm
有梦想的攻城狮22 分钟前
spring中的@RabbitListener注解详解
java·后端·spring·rabbitlistener
李斯维24 分钟前
循序渐进 Android Binder(二):传递自定义对象和 AIDL 回调
android·java·android studio
androidwork26 分钟前
OkHttp 3.0源码解析:从设计理念到核心实现
android·java·okhttp·kotlin
程序员岳焱27 分钟前
Java 程序员成长记(二):菜鸟入职之 MyBatis XML「陷阱」
java·后端·程序员
我命由我1234529 分钟前
Spring Boot 项目集成 Redis 问题:RedisTemplate 多余空格问题
java·开发语言·spring boot·redis·后端·java-ee·intellij-idea
面朝大海,春不暖,花不开29 分钟前
Spring Boot消息系统开发指南
java·spring boot·后端
程序员岳焱31 分钟前
Java 程序员成长记(三):菜鸟入职之@Transactional「罢工」
java·后端·编程语言
Rocky40139 分钟前
JAVAEE->多线程:锁策略
java·开发语言·jvm