go语言学习-基本概念与流程控制

1、hello world

// package: 声明这个文件是属于哪个包的
// 什么是包:可以理解为Go源码的集合,也是一种比较高级的代码复用方案。
// 我们可以把一些复用的代码或者是功能封装在一起,然后形成一个包,可以被另外一个包进行引用,
// 或者是被其他代码进行引用,
// 引用之后我们就可以使用包里面的功能// main是一个特殊的包,一个可执行的程序有且只有一个main包
// main函数是整个程序的入口,如果一个程序没有main函数是无法正常执行程序的
package main
import "fmt"// import: 用来导入一个包的// 定义一个入口函数
func main() { // 花括号进行表示一个代码块,括号内的代码属于同一个块内,// 也可以说属于同一个域内fmt.Println("Hello World, Hello Go")
}

2、 fmt 使用

package main// import: 用来导入一个包的
import "fmt"// 定义一个入口函数
func main() { // 花括号进行表示一个代码块,括号内的代码属于同一个块内,// 也可以说属于同一个域内fmt.Println("Hello World, Hello Go")fmt.Println("还可以打印中文")fmt.Print("使用print方法1") // 直接打印,不进行换行fmt.Print("使用print方法2") // 直接打印,不进行换行// 格式化进行打印,%sfmt.Printf("我们可以打印一个别的地方,传递过来的值:%s,这个值可以用占位,然后打印", "这是我想打印的内容")fmt.Println("还可以打印:", "中文")fmtEnv := fmt.Sprintf("拼接字符串:%s, 和这个字符串:%s, 以及一个数字: %d", "s1", "s2", 727585266)fmt.Println("拼接后的字符串是: ", fmtEnv)fmt.Println(3.1415926)
}

3、go语言基本概念

3.1 变量和常量

package mainimport ("fmt""reflect"
)func main() {// 在go语言当中定义变量// 第一种方法: var: 关键字, name: 变量名, string: 变量的类型// = 表示进行直接赋值var name string = "张宇"fmt.Println("我的名字是:", name)var name2 stringname2 = "zy"fmt.Printf("My English name is: %s\n", name2)// var name3, name4 string = "name3", "name4"var (name3 string = "name3"name4 int)println(name3, name4)// 第二种方法,使用语法糖进行声明变量b := true// b = "string"f := 3.1415926fmt.Println(b, f)b2 := false// 可以进行赋值吗?b = b2fmt.Println(b)// 如何确定一个变量的类型?// reflect// name2Type := reflect.TypeOf(name2)fmt.Println("name2的类型是: ", reflect.TypeOf(name2))fmt.Println("f的类型是: ", reflect.TypeOf(f))// 定义一个常量// 关键字constconst c1, c2, c3 = 1, 2, 3// const ()// 可以更改c1的值吗?// c1 = 5fmt.Println("常量的值是:", c1, c2, c3)
}

3.2 函数和作用域

package main
import "fmt"// 在func之外可以定义一个全局的变量
var globalName string = "zy"// 不可以使用语法糖
// globalName2 := "dddddd"
// 定义一个函数,这个函数用来打印名字
func printAd() {fmt.Println("我是张宇")// 我能不能在printAd里面调用name变量?// fmt.Println("我是: ", name) //我们不能调用其他函数的变量// 调用全局变量fmt.Println("全局变量的值: ", globalName)
}
func main() {var name = "张宇2"  //定义局部变量fmt.Println("name is: ", name)fmt.Println("程序开始运行")printAd()fmt.Println("在main函数内全局变量的值: ", globalName)fmt.Println("程序运行结束")
}

3.3 数值和字符串运算

package mainimport ("fmt""reflect"
)func numOperations(a, b int) {fmt.Printf("%d + %d = %d\n", a, b, a+b)fmt.Printf("%d - %d = %d\n", a, b, a-b)fmt.Printf("%d * %d = %d\n", a, b, a*b)fmt.Printf("%d / %d = %f\n", a, b, float64(a)/float64(b))// 1. 转换类型// 2. 除数不能为0 if-elsefmt.Printf("%d 取余 %d = %d\n", a, b, a%b)
}// 字符串运算
func stringOperation(a, b string) {fmt.Printf("a和b拼接后: %s\n", a+b) // 12 字符串ab := a + bfmt.Printf("ab: %s, 类型是:%s", ab, reflect.TypeOf(ab))
}// fmt.Sprintf
func stringSprintf(firstName, secondName string) {// fullName := secondName + " " + firstNamefullName := fmt.Sprintf("%s %s", secondName, firstName)fmt.Println("你的全名是:", fullName)
}func main() {// 数值的运算// i1 := 1// i2 := 2// fmt.Println("i1 + i2 = ", i1+i2)numOperations(1, 2)// numOperations(11111215, 22878454)name1 := "张宇"name2 := "zy"stringOperation(name1, name2)stringOperation("1", "2") // =3?  12?// numOperations(name1, name2)stringSprintf("宇", "张") // // strings.Join// 自增和自减p1 := 8p1++fmt.Println("自增后的值:", p1)p1--p1--fmt.Println("自减后的值:", p1)
}

3.4 数值类型详解

package mainimport ("fmt""math""reflect"
)func main() {// 数值类型:int int8 int16 int32 int64 uint// int: 正负数  uint:不带符号的数字 // intdefaultIntType := 1fmt.Println("默认的数值类型是:", reflect.TypeOf(defaultIntType))// int和操作系统是有关系的// 64位的,int64  32位的 int32var int64Num int64 = 1fmt.Println("int64Num的数值类型是:", reflect.TypeOf(int64Num))var uintNum uint = 1fmt.Println("uintNum的数值类型是:", reflect.TypeOf(uintNum))fmt.Println("int的取值范围:", math.MinInt, math.MaxInt)fmt.Println("uint的取值范围:", uint(math.MaxUint))fmt.Println(18446744073709551615 > 9223372036854775807)// float float32和float64var floatNum1 float64 = 3.14var floatNum2 float32 = 3.15// floatSum := floatNum1 + floatNum2fmt.Println(floatNum1, floatNum2)
}

3.5 关系和逻辑运算符

//面试点:两个字符串是否可以比较大小,是通过什么比较的: 可以,通过ASSCSI码去比较
package mainimport ("fmt""reflect"
)func main() {// 大于, 小于fmt.Println(727585 > 727588) // falsefmt.Println(727585 < 727588) // true// 是否相等,  =和==的区别fmt.Println("a" == "b") // falsefmt.Println(3.14 == 3.14)s1 := "zy"s2 := "zhy"// xxx := s1 == s2fmt.Println("s1和s2相等: ", s1 == s2)fmt.Println("s1和s2不相等: ", s1 != s2)fmt.Println("s1 > s2:", s1 > s2)fmt.Println("s2 > s1:", s2 > s1) //字符串是可以比较大小的, ASCII// 逻辑与和逻辑或  && ||n1 := 1n2 := 1n3 := 2// 与: 所有的表达式都为true,最终的结果就为truefmt.Println(n1 == n2 && n2 == n3) // true false => false// 或:任意一个为true,最终结果就为truefmt.Println(n1 == n2 || reflect.TypeOf(n3).Kind() == reflect.String)
}

4、go语言流程控制

4.1 if-else

package mainimport "fmt"// 定义价格的函数
func printPrice(weather string) {defaultPrice := 10// if 表达式 {代码块} else {代码块}// if 表达式 {代码块} else if  {代码块} else {}if weather == "sunny" {// 成立的话就执行下面的代码fmt.Println("今天是晴天,雨伞的价格是:", defaultPrice)} else {// 如果不成立执行else里面的代码,当然else可以没有fmt.Println("今天不是晴天,雨伞的价格是:", defaultPrice+10)}
}func printPriceWithWeather(weather string) {defaultPrice := 10// 小雨涨5块if weather == "lightRain" {// 成立的话就执行下面的代码fmt.Println("下小雨了,雨伞的价格是:", defaultPrice+5)} else if weather == "heavyRain" {// 如果不成立执行else里面的代码,当然else可以没有fmt.Println("下大雨了,雨伞的价格是:", defaultPrice+10)} else if weather == "rainStorm" {fmt.Println("下暴雨了,雨伞的价格是:", defaultPrice+20)} else {fmt.Println("雨伞的价格是:", defaultPrice)}
}func main() {// if else// 雨伞:10  下雨:20weather := "rain"printPrice(weather)// 晴天了weather = "sunny"printPrice(weather)// 小雨printPriceWithWeather("lightRain")printPriceWithWeather("rainStorm")// 晴天了printPriceWithWeather("")
}

4.2 switch

package mainimport "fmt"func printPriceWithWeather(weather string) {defaultPrice := 10// 小雨涨5块if weather == "lightRain" {// 成立的话就执行下面的代码fmt.Println("下小雨了,雨伞的价格是:", defaultPrice+5)} else if weather == "heavyRain" {// 如果不成立执行else里面的代码,当然else可以没有fmt.Println("下大雨了,雨伞的价格是:", defaultPrice+10)} else if weather == "rainStorm" {fmt.Println("下暴雨了,雨伞的价格是:", defaultPrice+20)} else {fmt.Println("雨伞的价格是:", defaultPrice)}
}func printPriceWithSwitch(weather string) {defaultPrice := 10/*switch是表达式,case是条件。表达式被评估一次。switch表达式的值与每个case的值进行比较。如果匹配,则执行相关的代码块。默认关键字是可选的。它指定了如果没有匹配的case时要运行的一些代码。*/switch weather {case "lightRain":fmt.Println("下小雨了,雨伞的价格是:", defaultPrice+5)case "heavyRain":fmt.Println("下大雨了,雨伞的价格是:", defaultPrice+10)case "rainStorm":fmt.Println("下暴雨了,雨伞的价格是:", defaultPrice+20)case "snowing", "sunny":// if elsefmt.Println("雨伞的价格是:", defaultPrice)default:fmt.Println("我不知道现在是什么天气,所以我不卖了~")}
}func main() {// // 小雨// printPriceWithWeather("lightRain")// printPriceWithWeather("rainStorm")// // 晴天了// printPriceWithWeather("")printPriceWithSwitch("")printPriceWithSwitch("snowing")
}

4.3 for循环

package mainimport ("fmt"
)func main() {// for 1-100// num := 1count := 0 // 偶数的个数// 判断1-100有哪些偶数,有多少个偶数for num := 1; num <= 100; num++ {if num%2 == 0 {// 说明是偶数fmt.Println("发现一个偶数:", num)count++}// time.Sleep(time.Second)}// for结束后会执行下面的代码fmt.Printf("1-100一共有偶数:%d个\n", count)// 判断是否是奇数num2 := 1for num2 <= 100 {if num2%2 != 0 {// 奇数fmt.Println("发现奇数:", num2)}num2++}
}

4.4 for循环的死循环实现

package mainimport ("fmt"
)func main() {
// 每十秒执行一次代码。 
//for此处不带条件的话就是死循环,gp语言默认是没有死循环一说的for {// HH:SS:MMtimeNow := time.Now()// 2006-01-02 15:04:05 go语言的诞生时间fmt.Println("当前的时间是:", timeNow.Format("2006-01-02 15:04:05")) // 这里面的代码会一直执行fmt.Println("我错了,原谅我吧")time.Sleep(time.Second * 3)}
}

4.4 break和continue

package mainimport ("fmt"
)func main() {// break continue// break: 终止循环// continue: 终止本次循环,继续下一次循环// 0-100: 88for i := 0; i < 100; i++ {if i == 88 {fmt.Println("我找到了88")break}fmt.Println("现在的数值是:", i)}// continuefor i := 0; i < 100; i++ {if i == 88 {fmt.Println("我找到了88")continue}fmt.Println("现在的数值是:", i)}
}

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

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

相关文章

瞻博 Juniper 网络设备基线安全加固操作

目录 账号管理、认证授权账号 ELK-Juniper-01-01-01 口令 ELK-Juniper-01-02-01 ​​​​​​​认证 ELK-Juniper-01-03-01 日志配置 通信协议 ELK-Juniper-03-01-01 设备其他安全要求 ELK-Juniper-04-01-01 账号管理、认证授权账号 ELK-Juniper-01-01-01 编号&#xff1a…

C#实现批量生成二维码

相信大家都使用过草料二维码生成器&#xff0c;单独生成二维码可以&#xff0c;但是批量生成二维码就需要收费了。既然要收费&#xff0c;那就自己写一个。 接口采用导入Excel文件生成二维码&#xff0c;首先需要读取Excel的数据&#xff0c;方法如下所示&#xff1a; /// <…

python练习题(markdown中的60道题)

1.Demo01 摄氏温度转化为华氏温度 celsius float(input(输入摄氏温度&#xff1a;)) fahrenheit (9/5)*celsius 32 print(%0.1f 摄氏温度转为华氏温度为 %0.1f % (celsius, fahrenheit))结果&#xff1a; 2.Demo02 计算圆柱体的体积 h, r map(float, input().split())# …

python tkinter 使用(三)

python tkinter 使用(三) 本篇文章主要讲下tkinter下的filedialog的使用. 1: askopenfilename 首先使用tkinter中fiedialog来实现一个简单的文件选择器. 这里使用askopenfilename()来启动文件选择器,选择成功后打印下所选文件的名称. #!/usr/bin/python3 # -*- coding: UT…

echarts实现如下图功能代码

这里写自定义目录标题 const option {tooltip: {trigger: axis},legend: {left: "-1px",top:15px,type: "scroll",icon:rect,data: [{name:1, textStyle:{color: theme?"#E5EAF3":#303133,fontSize:14}}, {name: 2, textStyle:{color: theme…

小程序泄露腾讯地图apikey

今天挖小程序时测了很久&#xff0c;一直没有头绪&#xff0c;后来想要测试一下支付漏洞&#xff0c;但是这里却出问题了 添加地址时我发现&#xff0c;当我添加一个地址时&#xff0c;他会显示腾讯地图的logo和一部分小图&#xff0c;那时候我就在想&#xff0c;既然这里可以调…

函数隐式声明的危害及处理(C语言)

1.为什么要将函数隐式声明提升为编译错误 请看这个编译警告&#xff1a; [ 71%] Building C object main/CMakeFiles/shake.dir/pjt_helper.c.o /home/fengxh/shake_src/data_dispatch/main/pjt_helper.c: In function ‘SysMqtt_GetStateJsonPayload’: /home/fengxh/shake_s…

Vmware 扩展硬盘空间后的操作-Ubuntu

在VMware中扩展了Ubuntu虚拟机的硬盘容量后&#xff0c;你需要在Ubuntu内部进行操作才能使用新增的空间。过程包括为增加的空间建立分区、格式化以及挂载该分区供使用。下面是具体的步骤&#xff1a; 首先登录到你的Ubuntu系统&#xff0c;用lsblk命令查看分区情况。这样你可以…

多普勒流速仪的功能作用是什么?

我国地域广大&#xff0c;各地降雨分布不均&#xff0c;某些城市经常会出现连续的降雨进而导致城市排水压力过大&#xff0c;为了提高城市应对排水过量的极端情况的出现&#xff0c;亟需一种方案能够对城市排水进行有效及时的监测&#xff0c;从而能够及时的采取应对方案。 在污…

IO口电压下降那么多是怎么回事??

前几天一个工程师向我反馈他测得如下电路MCU IO口的电压不是3.3V&#xff0c;只有2V多。 IO配置的是输入功能&#xff0c;无上下拉。最初我不太相信这个结果&#xff0c;后来自己用万用表实际测量了下&#xff0c;还真是这个结果 这是咋回事呢&#xff1f;不应该电压就是3.3V吗…

前缀和的动态维护——树状数组[C/C++]

文章目录 前言lowbitlowbit的定义lowbit的计算 树状数组的思想树状数组的操作单点修改 update前缀查询 query树状数组的建立 build 前言 树状数组巧妙了利用位运算和树形结构实现了允许单点修改的情况下&#xff0c;动态维护前缀和&#xff0c;并且实现单点修改和前缀和查询的效…

【JavaEE】操作系统与进程

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

python 水质日历热力图

利用日历热力图可以方便的查看站点水质全年的变化情况。 接口获取站点数据 这一步根据自己实际情况&#xff0c;也可以读取excel、MySQL读取数据。这里把API地址已隐去。 import numpy as np import calendar import requests import json import pandas as pd import time f…

给定两个字符串 s 和 t ,找不同

题意&#xff1a; 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1&#xff1a; 输入&#xff1a;s “abcd”, t “abcde” 输出&#xff1a;“e”…

【python学习】基础篇-常用第三方库-psutil:用于获取CPU、磁盘与网络等系统信息和进程管理

psutil是一个跨平台的Python库&#xff0c;用于获取系统信息和进程管理。以下是一些基本的用法&#xff1a; 获取CPU使用率 cpu_percent psutil.cpu_percent(interval1) print(cpu_percent)获取内存使用情况 memory_info psutil.virtual_memory() print(memory_info.perce…

Linux:进度条(小程序)以及git三板斧

Linux小程序&#xff1a;进度条 在实现小程序前我们要弄清楚&#xff1a; 1.缓冲区&#xff1b; 2.回车与换行。 缓冲区&#xff1a; 分别用gcc来编译下面两个程序&#xff1a; 程序一&#xff1a; #include <stdio.h> int main() { printf("hello Makefil…

前后端分离SpringBoot+vue的买菜农副产品多功能商城

1&#xff0c;项目介绍 本系统主要针对买菜而设计&#xff0c;其功能有菜品基本信息管理、商品类别管理、系统订单管理、评论管理、系统用户管理等功能模块。并且本系统采用了现在流行的SpringBootVue进行的设计与实现&#xff0c;其中Tomcat为服务器&#xff0c;MySQL为数据库…

QT中的lambda表达式

面是对Qt中在QObject::connect()中的lambda表达式常用用法 QString str("I am a string!"); devicestr; connect(ui- connect(m_imgshowUI, &ImgShow::GetImgPath, m_visionplatform, [](const std::string filename){m_visionplatform->ReadImg(filename);}…

moviepy 视频剪切,拼接,音频处理

官网 使用matplotlib — moviepy-cn 文档 案例 from moviepy.editor import * from moviepy.video.fx import resize from PIL import Imagefile1r"D:\xy_fs_try\video_to_deal\spider_video\file\vedeo3.mp4" file2r"D:\xy_fs_try\video_to_deal\spider_video\…