Golang(2)——入门语法之基本语法(函数、变量、类型(自动推导、强转)、流程控制 for、 if else、 switch、defer)

2023-11-12

基本语法:包、函数、var变量、const常量、类型、流程控制、更多类型

包管理

go中没有public、private、protected等访问控制修饰符,它是通过字母大小表示能否被其他方访问或者调用的,大写的方法就表示是可以被调用的(相当于public),小写就只能在包内用。public与否的另一种说法是“是否导出”, 对应的,大写的表示是已导出的,小写开头的表示是未导出的,所以当你调用别的包里的方法就永远都是大写开始的fmt.PrintIn(math.pi)

另外,go的包名只需要写短的就行,它会根据放在哪个文件夹的路径下面去自动推导的

函数

func关键字,add函数名,(x, y int)参数及其类型,当参数类型相同可以只用一个类型(类型声明是放后面的), 最后一个int表示返回类型

func add(x, y int) int{
	return x+y;
}

函数特点:
1,可以多值返回

func swap(x, y string)(string string)
{
	return y,x
}

2,可以对返回值进行命名(但感觉可读性不是很好,代码多了容易看晕……

func split(sum int)(x, y int)
{
	x = sum * 4 / 9
	y = sum - x
	return
}

变量

特点:
1,变量可以出现在包的级别,也可以出现在func中
2,可以一起初始化,可以不指定类型var java, c, test = 1, "dfer", true

package main
import "fmt"

var i, j int = 1,2 //可以在包内出现,可以指明类型

func main()
{
	var c, python, java = true, false, "ok" //可以出现在函数内,可以不指明类型
	fmt.Println(i, j, c, python, java)
}

3,简洁赋值语句 :=可在类型明确的地方代替var声明,但不能出现在函数外

package main

import "fmt"

func main()
{
	var i, j, int = 1, 2 //var的用法,要写变量,可能要声明,要赋值,太麻烦
	k := 3 //就是上行赋值前的缩写 
	c, python, java := true, false, "ok" //多个赋值也可以
	fmt.Println(i, j, k, c, python, java)
}

const 常量

类型

在这里插入图片描述
注意没有float,一般就用float64int……那一类我们一般就直接用intbyte相当于无符号八位整型uint8rune用比较少相当于int32表示一个unicode码点(?)

类型自动推导

就是在初始化一个变量的时候,直接给它一个值,系统就会自动根据这个值来判断类型

类型转换

在Go中,不同类型的项之间赋值时需要显示转换,不支持隐式转换

数值之间的转换比较简单:

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

或者更加简单的形式

i := 42
f := float64(i)
u := uint(f)

string和int…之间的转换稍微麻烦一点

int, err := strconv.Atoi(str) //string转换成int
string := strconv.Itoa(int) //int ->string

var data []byte = []byte(str) //str->byte
var str string = string(data[:]) //byte->string

//float<--> strinf
float, err:=strconv.ParseFloat()
string = strconv.Format()

Go的流程控制

1, 只有一种循环结构for 赋初值; 终止条件; 每次循环之后对变量的操作不需要括号, 其中第一个和第三个条件是可以去掉的,可以连着分号去掉,这个时候跟while语句没什么区别了

func mian()
{
	//sum :=1
	for sun := 1; sum <1000; sum +=1
	{
		sum+=sum
	}
	fmt.Println(sum)
}

for{}就是一个死循环

2, if else 区别在于可以在执行判断前先执行一个语句if z:=x+y; z<a{}其实我们要做的判断是z<a但是在做这个判断前先做一个操作

3,switch:特点是Go只运行选定的case,而非之后所有的case,相当于在每个case后面自动提供了一个break,除非以fallthrough语句结束,否则分支会自动终止; 而且Go的另一重要点在于switch的case无需为常量,且不必取为整数
另外,也可以在执行前,先执行一个语句switch v:=x+y; v{}在做判断之前可以做一个类似于初始化的操作

func main()
{
	fmt.Print("Go runs on")
	switch os:= runtime.GOOS; os
	{
		case "darwin" :
			fmt.Println("Os X")
		case "linux"
			fmt.Println("Linux")
		default:
			//...
			fmt.Println("%s. \n", os)
	}
}

最后,可以用switch(无判断)+case 替代一堆if else

func main()
{
	t := time.Now()
	switch     //没有判断
	{
		case t.Hour() <12
			fmt. Println("Good morning")
		case t.Hor()<17
			fmt. Println("afternoon")
		default:
			fmt.Println("evening")
	}
}

5, defer
1,defer语句会推迟到外层函数返回之后执行,但其参数会立即求值,只是返回前不会调用
2,defer的调用是被压入了栈中,会按先进后出的顺序调用
延时执行

func add1(x int) int
{
	fmt.Println("add1")
	return x+1
}

func main()
{
	defer fmt.Println("world", add1(8))
	fmt.Println("hello")
}

main函数运行到defer先不执行打印语句,但是会将参数add1先求出来但是不去调用,等全部执行完再去执行defer语句

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang(2)——入门语法之基本语法(函数、变量、类型(自动推导、强转)、流程控制 for、 if else、 switch、defer) 的相关文章

  • 带你使用Golang快速构建出命令行应用程序

    在日常开发中 大家对命令行工具 CLI 想必特别熟悉了 如果说你不知道命令工具 那你可能是个假开发 每天都会使用大量的命令行工具 例如最常用的Git Go Docker等 不管是做技术开发还是业务开发 都会有开发命令行程序的场景 例如如果是
  • go Cobra命令行工具入门

    简介 Github https github com spf13 cobra Star 26 5K Cobra是一个用Go语言实现的命令行工具 并且现在正在被很多项目使用 例如 Kubernetes Hugo和Github CLI等 通过使
  • Go切片排序

    Go 语言标准库提供了sort包 用于对切片和用户定义的集合进行排序 具体示例如下 基本排序 package main import fmt sort func main float 从小到大排序 f float64 5 2 1 3 0 7
  • golang:环境变量GOPROXY和GO111MODULE设置

    我们安装完golang后 我们在windows的cmd命令下就可以直接查看和使用go命令和环境变量了 同样的在linux下可以在控制台使用 如下图所示 C Users lijie1 gt go env set GO111MODULE set
  • Golang协程与通道整理

    协程goroutine 不由OS调度 而是用户层自行释放CPU 从而在执行体之间切换 Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之 不通过OS进行切换 自行切换 系统运行开支大大降低 通道channel 并发编
  • Go 语言输出文本函数详解

    Go语言拥有三个用于输出文本的函数 Print Println Printf Print 函数以其默认格式打印其参数 示例 打印 i 和 j 的值 package main import fmt func main var i j stri
  • 掌握 Go 语言中的循环结构:从基础到高级

    一 if else 分支结构 1 if 条件判断基本写法 package main import fmt func main score 65 if score gt 90 fmt Println A else if score gt 75
  • go-zero 开发入门-加法客服端示例

    定义 RPC 接口文件 接口文件 add proto 的内容如下 syntax proto3 package add 当 protoc gen go 版本大于 1 4 0 时需加上 go package 否则编译报错 unable to d
  • go-zero开发入门之网关往rpc服务传递数据2

    go zero 的网关服务实际是个 go zero 的 API 服务 也就是一个 http 服务 或者说 rest 服务 http 转 grpc 使用了开源的 grpcurl 库 当网关需要往 rpc 服务传递额外的数据 比如鉴权数据的时候
  • go-zero目录结构和说明

    code of conduct md 行为准则 CONTRIBUTING md 贡献指南 core 框架的核心组件 bloom 布隆过滤器 用于检测一个元素是否在一个集合中 breaker 熔断器 用于防止过多的请求导致系统崩溃 cmdli
  • go-zero开发入门-API服务开发示例

    接口定义 定义 API 接口文件 接口文件 add api 的内容如下 syntax v1 info title API 接口文件示例 desc 演示如何编写 API 接口文件 author 一见 date 2023年12月07日 vers
  • “go mod tidy”之错误“not a valid zip file”

    执行 go mod tidy 时 遇到如下错误 rpc imports github com zeromicro go zero zrpc imports github com zeromicro go zero zrpc resolver
  • Go 语言中切片的使用和理解

    切片与数组类似 但更强大和灵活 与数组一样 切片也用于在单个变量中存储相同类型的多个值 然而 与数组不同的是 切片的长度可以根据需要增长和缩小 在 Go 中 有几种创建切片的方法 使用 datatype values 格式 从数组创建切片
  • 协程-单线程内的异步执行

    1 仿协程实例 不同事件依次顺序执行 coding utf 8 import time def calculate 1 step event name for index in range step print This is s even
  • go语言实现文件夹上传前后端代码案例

    go语言实现文件夹上传前后端代码案例 前端用于上传的测试界面 如果上传的文件夹有子文件要遍历子文件夹创建出子文件夹再进行拷贝 需要获取文件名和对应的路径 将文件的相对路径和文件对象添加到FormData中 这几行代码很关键 for let
  • [每周一更]-(第55期):Go的interface

    参考地址 https juejin cn post 6978322067775029261 https gobyexample com interfaces https go dev tour methods 9 介绍下Go的interfa
  • Golang拼接字符串性能对比

    g o l a n g golang g o l an g
  • golang 生成一年的周数

    GetWeekTimeCycleForGBT74082005 获取星期周期 中华人民共和国国家标准 GB T 7408 2005 参数 year 年份 GB T 7408 2005 func GetWeekTimeCycleForGBT74
  • go cannot find package “github.com/gorilla/websocket“解读

    Go无法找到包 github com gorilla websocket 的解决方案 在Go开发过程中 我们经常会依赖第三方库来简化开发工作 而使用 go get 命令安装这些库时 有时候我们可能会遇到类似于以下错误的情况 plaintex
  • 【go语言】AST抽象语法树详解&实践之扫描代码生成错误码文档

    背景 为了能识别出代码中抛出错误码的地址和具体的错误码值 再根据错误码文件获取到错误码的具体值和注释 方便后续的排错 这里使用AST进行语法分析获取到代码中的目标对象 一 编译过程 在开始解析代码之前先补充了解一下编译过程 编译过程是将高级

随机推荐

  • 看融合数学教学的steam教育模式

    传统意义上的 教育 德育 教学双肩挑 是要求教师能够处理好 德育 和 教学 两方面的工作要求 这实质上是通过人为划分的两个途径实现对学生的培养 STEAM教育的跨学科整合思维能够很好的迁移在 德育 与 教学 的整合上 即在教师引导下的学生参
  • OWASP Top 10 2021 榜单出炉,安全人员必看

    作为一个安全人员 如果你还不知道OWASP Top 10是什么 那么请你接着往下看 OWASP 开放式Web应用程序安全项目 是一个开源的 非营利性的全球性安全组织 致力于改进Web应用程序的安全 这个组织最出名是 它总结了10种最严重的W
  • 数据结构小白之队列与环形队列的模拟

    队列的简单介绍 队列是一个有序列表 可以使用数组或者链表来实现 队列遵循先入先出的原则 先存入队列的数据要先取出 后存入的后取出 使用数组来模拟队列 说明 实现思路 示意图 代码 1 说明 队列本身是有序列表 若使用数组的结构来存储队列的数
  • 安装和更新node的正确姿势

    干货时刻 本文主要讲解了如何安装node 以及如何更新node的版本 node js 是什么 简称node 是基于Chrome V8引擎的JavaScript JS 运行时环境 node 安装 进入node 官网 点击如下图所示的安装包即可
  • 前端之HTML

    一 概念 1 页面组成 结构 HTML Hyper Text Markup Language 超文本标记语言 页面原始和内容 表现 CSS 网页原始的外观和位置等页面样式 如颜色 大小等 行为 JavaScript 网页模型的定义与交互 简
  • 计算机组成原理慕课测试-第四单元

    计算机字长32位 主存容量为128MB 按字编址 其寻址范围为 0 32M 1 1 B 8b 1 kB 1024 B kB kilobajt 千 1 MB 1024 kB MB megabajt 兆 1 MB 1024 kB MB mega
  • IPV6 阿里DDNS

    IPV6 阿里DDNS 因为需要在家搭建一套环境 并且需要公网能访问 国内的ipv4的地址 各大运营商基本都不会分配ipv4地址 电信宽带好像有地方可以 但是听说很贵 而且是动态的 每过段时间就会改变 发现移动宽带的公网ipv6地址是可以获
  • 微信为什么更受欢迎?

    想必大家都和我一样 曾是一个QQ的忠实用户 认为QQ是最受欢迎的社交软件 其实不然 微信比QQ更受欢迎 只是我们根本不知道微信 所以 我们来谈谈微信NB在那里吧 1 QQ的用户是年轻化 娱乐性强 而微信让不是qq用户的人也加入进来 变得更加
  • CentOS通过nvm安装管理node

    今天搭建CentOS node 环境 原本打算源码安装 环境编译一直出错 为节省时间 直接用nvm 来下载和管理node nvm 是一个开源软件 大家可以在github 上面 下载它的源码https github com creationi
  • 【AI with ML】第 14 章 :在 iOS 应用程序中使用 TensorFlow Lite

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Applications(4)

    CONTENTS Other Applications In this section we cover a few other types of applications of deep learning that are differe
  • java使用smb操作win共享文件夹

    package com zky util import jcifs smb SmbException import jcifs smb SmbFile import jcifs smb SmbFileInputStream import j
  • 新手LearnOpenGL纹理不显示的部分解决方法

    项目场景 在LearnOpenGL学习中遇到的一些问题 照着写但是纹理加载不出来或者两张纹理只加载一张 问题描述 lt 纹理加载不出来 gt 1 文件路径是否正确 是否输出texture load fail等提示 设置了成功检查才会有提示
  • RK3568 Camera 使用

    RK3568 Camera 使用 RK3568 Sensor驱动开发移植 1 RK3568 Sensor驱动开发移植 2 RK3568 Sensor驱动开发移植 3 MIPI CSI用法 RK3568平台仅有一个标准物理mipi csi2
  • 修改pip下载源

    pip国内的一些镜像 阿里云 中国科学技术大学 豆瓣 清华大学 中国科学技术大学 修改源方法一 linux 修改 pip pip conf 如无就创建一个新的 修改内容为 global index url https pypi tuna t
  • 三、C语言进阶:二维指针

    3 二维指针 3 1 什么是二维指针 二维指针与一维指针一样都是保存变量的地址 实例 一维指针存放变量地址 二维指针存放一维指针地址 include
  • Java 多线程启动为什么调用 start() 方法而不是 run() 方法?

    多线程在工作中多多少少会用到 我们知道启动多线程调用的是 start 方法 而不是 run 方法 你知道原因吗 在探讨这个问题之前 我们先来了解一些多线程的基础知识 线程的状态 Java 中 定义了 6 种线程状态 在 Thread 类可以
  • 德标螺纹规格对照表_螺栓螺母德标 欧标 国标对照表

    新德标 旧德标 英文名 中文名 国标 DINENISO4014 DIN931 1 Hexagonheadbolts ProductgradesAandB I SO4014 1999 六角头螺栓 GB T5782 2000 DINENISO4
  • muduo网络库定时器的实现

    一 函数介绍 常见的与时间相关的函数有 sleep alarm usleep nanosleep clock nanosleep gettimer settitimer timer create timer settime timer ge
  • Golang(2)——入门语法之基本语法(函数、变量、类型(自动推导、强转)、流程控制 for、 if else、 switch、defer)

    基本语法 包 函数 var变量 const常量 类型 流程控制 更多类型 包管理 go中没有public private protected等访问控制修饰符 它是通过字母大小表示能否被其他方访问或者调用的 大写的方法就表示是可以被调用的 相