【Java转Go】快速上手学习笔记(二)之基础篇一

目录

  • 创建项目
    • 数据类型
    • 变量常量
    • 类型转换
    • 计数器
    • 键盘交互
    • 流程控制
    • 代码
    • 运算符

创建项目

上篇我们安装好了Go环境,和用IDEA安装Go插件来开发Go项目:【Java转Go】快速上手学习笔记(一)之环境安装篇 。

这篇我们开始正式学习Go语言。我是看B站的视频边学边看着视频敲代码的,所以代码笔记也是按照视频讲的顺序来写的。

(然后还有个点需要说明一下,就是我这个笔记应该是只适合有其他编程语言基础的人看,如果没有其他语言基础,还是要找视频或资料系统的学习)

首先是创建一个项目:

在这里插入图片描述
在这里插入图片描述

项目创建好后,new一个Go File。
在这里插入图片描述

数据类型

这里先说一下go的数据类型,主要分为四大类:布尔类、数字类、字符串类、派生类

布尔类就是true、false;数字类就是浮点数和整型;字符串类就字符串咯;派生类就比较多了,包括了指针类型(Pointer)、 数组类型、结构化类型(struct)、Channel 类型、函数类型、切片类型、接口类型(interface)、 Map 类型

在这里插入图片描述

go中,所有数据类型都有一个默认值(零值),整型、浮点默认值是0,字符串类型默认是空字符串,布尔类型默认是false。

变量常量

在这里插入图片描述

package mainimport "fmt"// 这里是全局变量
var num int = 100/*
这个是main函数,这是go语言启动的入口
*/
func main() {fmt.Print("hello!world!") // 不换行打印fmt.Println("我是符华呀~")     // 换行打印fmt.Println("我是" + "符华呀") // 字符串连接,用+实现,打印的是:我是符华呀~// var 变量名 数据类型var name string = "符华" // 定义一个字符串变量var age int = 20       // 定义一个int变量name = "赤鸢"            // 改变name变量的值fmt.Println(name, age) // 打印name和age值,多个值直接用逗号隔开// 不过像版本较高的sdk,其实定义变量的时候,不用指定数据类型也可以,会自动识别,例如://var name,age,a,b = "符华",20,1.56,true
}

在这里插入图片描述

注意,Go语言是不用写分号的(编译的时候会默认帮我们加分号),一行就是在最后默认加一个分号,一句代码就是一行,不可以把多句代码写在一行。

在这里插入图片描述

不过要是非得写一行,一句代码用分号分隔也是可以的,但是不建议这么写。而且我用的idea,我这么写后,会自动帮我格式化分成两行并且把分号去掉了。

在这里插入图片描述
当我们要拼接一个长字符串的时候,需要换行,这时,我们需要把换行的加号保留在上一行
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
除了用var声明变量外,还可以用 := 声明短变量。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类型转换

go中,基本数据类型的类型转换必须显示转换(强制转换),不能自动转换。 转换的表达式:T(v),T表示数据类型,v表示要转换的变量。转换时,被转换的是变量存储的值,变量本身的数据类型并没有发生变化。

在这里插入图片描述
其他类型转string,使用 fmt.Sprintf
在这里插入图片描述
在这里插入图片描述

计数器

在这里插入图片描述

键盘交互

在这里插入图片描述

流程控制

流程控制语句:if、switch、for

if这个没啥好说的,就是 if、else、else if,这个和Java一样。

在这里插入图片描述

在这里插入图片描述

代码

上面说到的代码全在这里了,大家可以复制下来,自己从上到下一个一个去执行一遍(放开注释),加深下印象。

package mainimport ("fmt"
)// 这里是全局变量
var num int = 100/*
这个是main函数,这是go语言启动的入口
*/
func main() {fmt.Print("hello!world!") // 不换行打印fmt.Println("我是符华呀~")     // 换行打印fmt.Println("我是" + "符华呀") // 字符串连接,用+实现,打印的是:我是符华呀~// var 变量名 数据类型//var name string = "符华" // 定义一个字符串变量//var age int = 20       // 定义一个int变量//name = "赤鸢"            // 改变name变量的值//fmt.Println(name, age) // 打印name和age值,多个值直接用逗号隔开// 不过像版本较高的sdk,其实定义变量的时候,不用指定数据类型也可以,会自动识别,例如://var name,age,a,b = "符华",20,1.56,true// 字符串除了用双引号,还可以用反单引号,也就是 `这里是内容`// 当我们有一个比较复杂的字符串时,用双引号遇到特殊字符需要转义,而且拼接比较麻烦,这时我们可以用反单引号var str = "abc\nabc"str = `abc\nabc`str = `package mainimport "fmt"func main() {fmt.Print("hello!world!") // 不换行打印fmt.Println("我是符华呀~")     // 换行打印fmt.Println("我是" + "符华呀") // 字符串连接,用+实现,打印的是:我是符华呀~var name string = "符华" // 定义一个字符串变量var age int = 20       // 定义一个int变量fmt.Println(name, age) // 打印name和age值,多个值直接用逗号隔开}`fmt.Println(str)/*定义多个变量*///var (//	name     string//	age      int//	addreass string//)//name = "符华"//age = 20//addreass = "惠州市"//fmt.Println(name, age, addreass)/*短变量初始化声明,推导声明写法,可以用 := 自动识别变量类型,全局变量不能用短变量定义只能在函数内部使用,不能随便到处声明。由于使用了:=,而不是赋值的=,因此推导声明写法的左值变量必须是没有定义过的变量。*///var name = "李四" // 不能先用var声明了变量后,又用 := 去声明//name := "张三"//age := 20//name = "符华"//fmt.Println(name, age)//fmt.Printf("%T,%T", name, age) // 按照指定的格式输出,这里%T意思的类型,也就是打印这两个变量的类型//var num int = 100//fmt.Printf("num:%d,内存地址:%p", num, &num) // %d表示数字,%p表示变量内存地址,然后取内存地址用 &变量名//num = 200//fmt.Printf("num:%d,内存地址:%p", num, &num)/*变量的交换*///var a int = 100//var b int = 200//b, a = a, b//fmt.Println(a, b)/*自增、自减:自增、自减只能作为表达式使用,而不能用于赋值语句。*///a := 1//a++//a--//var b intb = a++ // 这里是错误的用法//fmt.Println(b)/*匿名变量,用 _ 表示,本身是一个特殊标识符,被称为空白标识符,表示任何类型都可以赋值给它,但任何赋值都将被抛弃使用匿名变量时,只需要在变量声明的地方使用下划线替换即可。*///a, _ := test() // 只需要取第一个返回值,所以第二个返回值用匿名变量接收//_, b := test() // 只需要取第二个返回值,所以第一个返回值用匿名变量接收//fmt.Println(a, b)/*常量定义*///const name1 string = "常量1" // 显式定义//const name2 = "常量2"        // 隐式定义//const a, b, c = 3.14, "符华", false//fmt.Println(name1)//fmt.Println(name2)//fmt.Println(a, b, c)/*计数器:iota,每次在const关键字出现时,将被重置为0,const中每新增一行常量声明将使iota计数一次(+1)*///const (//	a = iota  // 默认iota=0//	b         // iota=1//	c         // iota=2//	d = "hhh" // 输出hhh,但是iota会继续计数,iota=3//	e         // 输出hhh,iota=4//	f = iota  // iota=5//	g = iota  // iota=6//	h         // iota=7//	i = "hhh" // 输出hhh,iota=8//)//const (//	j = iota // 这里iota将重置为0//	k        // iota=1//)//fmt.Println(a, b, c, d, e, f, g, h, i, j, k)//var isFlag bool = true//fmt.Printf("%T\n%t\n", isFlag, isFlag)//var f1 float64 = 3.14//fmt.Printf("%T,%.2f\n", f1, f1) // %f表示输出对应浮点数值,%.2f表示保留两位小数(四舍五入)//var str string = "字符串"//fmt.Printf("%T,%s\n", str, str) // %s表示输出对应字符串值//v1 := 'A'//v2 := "A"//fmt.Printf("%T,%d\n", v1, v1)//fmt.Printf("%T,%s\n", v2, v2)/*类型转换:基本数据类型的类型转换必须显示转换(强制转换),不能自动转换。转换的表达式:T(v),T表示数据类型,v表示要转换的变量。转换时,被转换的是变量存储的值,变量本身的数据类型并没有发生变化。*///a := 5.52//b := 3//c := int(a)//d := float64(b)//fmt.Printf("%T\n", a)//fmt.Printf("%T\n", b)//fmt.Printf("%T\n", c)//fmt.Printf("%T\n", d)// 其他类型转stringnum1 := 100    // 整型num2 := 100.23 // 浮点isFlag := true // 布尔char := 'a'    // charvar str stringstr = fmt.Sprintf("%d", num1)fmt.Printf("类型=%T,值=%v\n", str, str)str = fmt.Sprintf("%f", num2)fmt.Printf("类型=%T,值=%v\n", str, str)str = fmt.Sprintf("%t", isFlag)fmt.Printf("类型=%T,值=%v\n", str, str)str = fmt.Sprintf("%c", char)fmt.Printf("类型=%T,值=%v\n", str, str)// string转其他类型,用 strconv 包下对应的函数,如:ParseBool()、ParseInt()、ParseFloat/*输入:键盘交互*///var x int//var y float64//fmt.Println("请输入两个数 1、整数 2、浮点数") 通过操作地址,将输入的值赋值给变量//fmt.Scanln(&x, &y) // 等待键盘输入//fmt.Println(x, y)//fmt.Println("请输入一个字符串") 在io中,可以使用bufio包来读取输入的内容//reader := bufio.NewReader(os.Stdin)//s1, _ := reader.ReadSlice('\n')//fmt.Println("读出的内容为:", s1)/*局部变量*///temp := 100           // func函数体里的局部变量//if b := 1; b <= 100 { // 这里定义了一个b变量,只作用于if语句里面//	temp := 50        // 这定义的是if语句内的局部变量,到了if语句外是不能使用的//	fmt.Println(temp) // 局部变量,就近原则//	fmt.Println(b)//}//fmt.Println(temp) // 这打印的是100//fmt.Println(num)/*switch:每写一个case,不用写break,除非使用了fallthrough穿透*///a := false//switch a {//case false://	fmt.Println("1、case条件为false")//	fallthrough // case穿透,不管下一个case的条件是否满足,都会执行//case true://	if a == false {//		break // 中止case穿透//	}//	fmt.Println("2、case条件为true")//}//var score int = 90//switch score {//case 90://	fmt.Println("A")//	fallthrough // case穿透,不管下一个case的条件是否满足,都会执行//case 80://	fmt.Println("B")//	fallthrough//case 50, 60, 70://	fmt.Println("C")//default://	fmt.Println("D")//}/*for循环*/// 计算1到10的数字之和//sum := 0//for i := 1; i <= 10; i++ {//	sum += i//}//fmt.Println(sum)// 无限循环//for {//	fmt.Println(0)//}//for j := 0; j < 5; j++ {//	for i := 0; i < 5; i++ {//		fmt.Print("* ")//	}//	fmt.Println()//}
}

运算符

关于运算符这里,我没有记代码(没啥好记的),所以我在这就直接去某个学习网站截图了🤪
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上面几个运算符,没啥好说的,不过关于自增、自减有个地方需要注意,就是:Go 的自增、自减只能作为表达式使用,而不能用于赋值语句。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

其他运算符这个关于指针变量,我下一篇会写。下一篇讲函数、函数类型、值传递、引用传递、切片、指针、匿名函数、回调函数、泛型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/94560.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt初入门0:结构体中QString用memset导致崩溃分析及QLatin1String简单查看源码

初识Qt,进行开发时遇到一个崩溃问题 简单整理 1&#xff1a;问题描述如下&#xff0c;结构体中QString成员&#xff0c;然后对结构体调用了memset导致问题&#xff1a; 2&#xff1a;问题分析&#xff0c;加断点调试的方式可以明确分析到行数 可以明确看出&#xff0c;初始化…

Linux:shell函数

目录 一、基本格式 二、查看函数 三、删除函数 四、函数的返回值 五、函数的传参数 六、函数的作用范围 ​七、函数的递归 在编写脚本时&#xff0c;有些脚本可以反复使用&#xff0c;可以调用函数来解决 语句块定义成函数约等于别名 函数使用方法&#xff1a; 定义函…

金蝶软件实现Excel数据复制分录信息粘贴到单据体分录行中

>>>适合KIS云专业版V16.0|KIS云旗舰版V7.0|K/3 WISE 14.0等版本<<< 实现Excel数据复制分录信息粘贴到金蝶单据体分录中,在采购订单|采购入库单|销售订单|销售出库单等类型单据中,以少量的必要字段在excel表格中按模板填列好,很方便快捷地复制到金蝶单据表体…

网络安全威胁与防御策略

第一章&#xff1a;引言 随着数字化时代的快速发展&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;网络的广泛应用也引发了一系列严峻的网络安全威胁。恶意软件、网络攻击、数据泄露等问题层出不穷&#xff0c;给个人和企业带来了巨大的风险。本文…

JVM - 垃圾回收机制

JVM的垃圾回收机制(简称GC) JVM的垃圾回收机制非常强大&#xff0c;是JVM的一个很重要的功能&#xff0c;而且这也是跟对象实例息息相关的&#xff0c;如果对象实例不用了要怎么清除呢&#xff1f; 如何判断对象已经没用了 当JVM认为一个对像已经没用了&#xff0c;就会把这个…

Airbnb开源数据可视化工具Visx

一、什么是visx visx 是用于 React 的富有表现力的底层可视化组件集合,结合了 d3 的强大功能来生成可视化,以及 React 更新 DOM 的诸多优势。 在 Airbnb 内部,visx 的目标是统一整个公司的可视化堆栈,在此过程中,创建了 visx 项目,从而有效的将 D3 的强大功能与 React …

手写代码-前端面试

GitHub&#xff1a;手写代码集合

一文教你快速 Cloudreve搭建云盘系统,实现随时访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

Redis——list类型详解

概要 Redis中的list类型相当于双端队列&#xff0c;支持头插&#xff0c;头删&#xff0c;尾插&#xff0c;尾删&#xff0c;并且列表中的内容是可以重复的。 如果搭配使用rpush和lpop&#xff0c;那么就相当于队列 如果搭配使用rpush和rpop&#xff0c;那么就相当于栈 lpu…

unity拓展 unity自带的类(Tranform为例)

因为我们使用了ILRuntime热更&#xff0c;unity 打出的WebGL包&#xff0c;运行就会报找不到DoTween里面的方法&#xff0c;所以吧DoTween拓展到tranform类里面&#xff0c;这样就不会报错了&#xff0c;下面是示例 using DG.Tweening; using System.Collections; using Syste…

git环境超详细配置说明

一&#xff0c;简介 在git工具安装完成之后&#xff0c;需要设置一下常用的配置&#xff0c;如邮箱&#xff0c;缩写&#xff0c;以及git commit模板等等。本文就来详细介绍些各个配置如何操作&#xff0c;供参考。 二&#xff0c;配置步骤 2.1 查看当前git的配置 git conf…

python_PyQt5运行股票研究python方法工具V1.1_增加表格展示控件

承接 【python_PyQt5运行股票研究python方法工具V1.0】 地址 python_PyQt5运行股票研究python方法工具V1.0_程序猿与金融与科技的博客-CSDN博客 目录 结果展示&#xff1a; 代码&#xff1a; 示例py文件代码&#xff08;计算股票日横截面数据&#xff09; 参数json文件 表…

nginx代理请求到内网不同服务器

需求&#xff1a;之前用的是frp做的内网穿透&#xff0c;但是每次电脑断电重启&#xff0c;路由或者端口会冲突&#xff0c;现在使用汉土云盒替换frp。 需要把公网ip映射到任意一台内网服务器上&#xff0c;然后在这台内网服务器上用Nginx做代理即可访问内网其它服务器&#xf…

自然语言处理技术:NLP句法解析树与可视化方法

自然语言处理(Natural Language Processing,NLP)句法解析树是一种表示自然语言句子结构的图形化方式。它帮助将句子中的每个词汇和短语按照语法规则连接起来,形成一个树状结构,以便更好地理解句子的语法结构和含义。句法解析树对于理解句子的句法关系、依存关系以及语义角…

爬虫逆向实战(四)--猿人学第一题

一、数据接口分析 主页地址&#xff1a;猿人学第一题 1、抓包 当我们打开F12时会发现直接debugger了&#xff0c;是一个无限debugger&#xff0c;我们直接右键debugger那一行&#xff0c;然后选择“一律不再此处暂停”就可以了 通过抓包可以发现登录接口是api/match/1 2、…

【FAQ】安防监控视频云存储平台EasyNVR频繁离线的原因排查与解决

有用户反馈&#xff0c;在使用EasyNVR时会出现通道频繁离线的情况。针对该反馈我们立即进行了排查。 安防视频监控汇聚EasyNVR视频集中存储平台&#xff0c;是基于RTSP/Onvif协议的安防视频平台&#xff0c;可支持将接入的视频流进行全平台、全终端分发&#xff0c;分发的视频流…

Docker容器与虚拟化技术:Docker镜像创建、Dockerfile实例

目录 一、理论 1.Docker镜像的创建方法 2.Docker镜像结构的分层 3.Dockerfile 案例 4.构建Systemctl镜像&#xff08;基于SSH镜像&#xff09; 5.构建Tomcat 镜像 6.构建Mysql镜像 二、实验 1.Docker镜像的创建 2. Dockerfile 案例 3.构建Systemctl镜像&#xff08;…

DAMO-YOLO:实时目标检测设计的报告

ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId4748421678288076801eId1920373270663763712 Abstract 在本报告中&#xff0c;我们提出了一种快速准确的目标检测方法&#xff0c;称为DAMO-YOLO&#xff0c;它比最先进的YOLO系列实现了更高的性能。DAMO-YOLO 通过…

图数据库_Neo4j_Centos7.9安装Neo4j社区版3.5.4_基于jdk1.8---Neo4j图数据库工作笔记0011

首先上传安装包,到opt/soft目录 然后看一下jdk安装的是什么版本的,因为在neo4j 4以后就必须要用jdk11 以上的版本,我这里还用着jdk1.8 所以 我这里用3.5.4的版本 关于下载地址: https://dist.neo4j.org/neo4j-community-3.5.4-unix.tar.gz 然后再去解压到/opt/module目录下 …

C语言刷题训练DAY.3

1.ASCII码 解题思路&#xff1a; 这里直接以字符的形式打印就行&#xff1a; 解题代码&#xff1a; #include<stdio.h> int main() {printf("%c%c%c%c%c%c%c%c%c%c%c%c", 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116, 33);return 0; } 2.出生日期输…