Go 基本语法

一、​​​​变量定义方法

  1. var 定义变量
  • var 变量名 类型 = 表达式
var name string = "Snail"
var age int =21
var isOK bool bool
2.类型推导方式定义变量
  • a 在函数内部,可以使用更简略的:= 方式声明并初始化变量
  • **注意:**短变量只能用于声明局部变量,不能用于全局变量的声明              
// 变量名 :=表达式
n := 10
var age = 18
3.一次定义多个变量
package main
import  "fmt"
func main(){var username ,sex stringusername = "蜗牛"sex = "男"fmt.Println(username, sex)
}
4.批量声明变量
package main
import "fmt"
func main(){var (a stringb int c bool)a = "蜗牛"b = 10c = truefmt.PrintIn(a,b,c)
}

二、常量定义

  • 声明了 pi 和 e 这两个常量之后,在整个程序运行期间它们的值都不能在发生变化了
const pi = 3.1415
const e = 2.7182//多个常量也可以一起声明
const (pi = 3.1415e = 2.7182
)
  • const同时声明多个常量时,如果省略了值啧表示和上面一行的值相同 
const(n1 = 100n2n3
)
// 上面示例中,常量n1、n2、n3的值都是 100

三、fmt 包

  • PrintIn:
    • 一次输入多个值的时候 PrintIn 中间有空格
    • PrintIn 会自动换行,Print 不会
  • Print:
    • 一次输入多个值的时候 Print 中间没有空格
    • Print 不会自动换行
  • Printf
    • Printf 是格式化输出,在很多场景在比 PrintIn 更方便
Package  mainimport   "fmt"func main() {fmt.Print("蜗牛","白河车","pupu")      //蜗牛白河车pupufmt.PrintIn("蜗牛","白河车","pupu")    //蜗牛 白河车 pupuname := "蜗牛"age := 21fmt.Printf("%s 今年 %d 岁",name,age)   //蜗牛 今年 21 岁
}

四、 init 函数和 main 函数

1.init 函数
  • go 语言中 init 函数用于包(package)的初始化,该函数是 go 语言的一个重要特性
  • 有下面的特征:
    • init 函数是用于程序执行前做包的初始化函数,比如初始化包里的变量等
    • 每个包可以拥有多个 init 函数
    • 包的每个源文件也可以拥有多个 init 函数
    • 同一个包中多个 init 函数的执行顺序 go 语言没有明确的定义(说明)
    • 不同包的 init 函数按照包导入的依赖关系决定该初始化函数的执行顺序
    • init 函数不能被其他函数调用,而是在 main函数执行之前,自动被调用
 2.main 函数
//Go 语言程序的默认入口函数(主函数):func main()
//函数体用{}一对括号包裹fun main(){//函数体
}
3.init 函数和 main 函数的异同
  • 相同点:
    • 两个函数在定义时不能有任何的参数和返回值,且 Go 程序自动调用
  • 不同点:
    • init 可以应用于任意包中,且可以重复定义多个
    • main 函数只能用于用于 main 包中,且只能定义一个
  • 两个函数的执行顺序:
    • 对同一个 go 文件的 init()调用顺序是从上到下的
  • 对同一个 package 中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的 init 函数
    • 对不同的 package,如果不相互依赖的话,按照 main 包中先 import 的后调用的顺序调用其包中的 init()
  • 如果 package 存在依赖,则先调用最早被依赖的 package 中 init(),最后调用 main 函数
    • 如果 init 函数中使用了 printIn()或者 print()你会发现在执行过程中这两个不会按照你想象中的顺序执行
    • 这两个函数官方只推荐在测试环境中使用
4.init() 函数介绍
  • 在 Go 语言程序执行时导入包语句会自动触发包内部 init()函数的调用
  • 需要注意的是:init()函数没有参数也没有返回值
  • init()函数在程序运行时自动被调用执行,不能在代码中主动调用它
  • 包初始化执行的顺序入下图所示:

五、命令

  1. go env 用于打印 Go 语言的环境信息
  2. go run命令可以编译并运行命令源码文件
  3. go get 可以根据要求和实际情况从互联网上下载货更新指定的代码包及其依赖包,并对它们进行编译和安装
  4. go build 命令用于编译我们指定的源码文件货代码包以及它们的依赖包
  5. go install用于编译并安装指定的代码包及它们的依赖包
  6. go clean 命令会删除掉执行其他命令是产生的一些文件和目录
  7. go doc命令可以打印附于 Go 语言程序实体上的文档。我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的
  8. go test命令用于对 Go 语言编写的程序进行测试
  9. go list命令的作用是列出指定的代码包的信息
  10. go fix会把指定代码包的所有 Go 语言源码文件中的旧版本代码修正为新版本的代码
  11. go vet是一个用于检查 Go 语言源码中静态错误的简单工具
  12. go tool pprof 命令来交互式的访问概要文件的内容

六、golang 中关键字

  • var 和 const:变量和常量的声明
  • package and import:导入
  • func:用于定义函数和方法
  • return:用于从函数返回
  • defer someCode:在函数退出之前执行
  • go:用于并行
  • select: 用于选择不同类型的通讯
  • interface: 用于定义接口
  • struct:用于定义抽象数据类型
  • break、case、continue、for、fallthrough、else、if、switch、goto、default、流程控制
  • chan:用于 channel 通讯
  • type:用于声明自定义类型
  • map:用于声明 map 类型数据
  • range:用于读取 slice、map、channel数据

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

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

相关文章

Java核心知识点整理大全20-笔记

目录 17. 设计模式 17.1.1. 设计原则 17.1.24. 解释器模式 18. 负载均衡 18.1.1.1. 四层负载均衡(目标地址和端口交换) 18.1.1.2. 七层负载均衡(内容交换) 18.1.2. 负载均衡算法/策略 18.1.2.1. 轮循均衡(Roun…

短视频账号矩阵系统开发--saas源头技术开发(手机版)

目前PC端网页版基本上已经很倦市场了,所以在这种情况下 ,我们已经专注开发短视频矩阵系统pc版3年了,目前我们这边核心技术优势就是都是自己一手搭建开发的并且我们的剪辑算法也是自己一手源头开发的,剪辑成本后期运营成本低&#…

上门预约互联网干洗店洗鞋店小程序开发

很多时候可能大家的衣服鞋子需要干洗,但又不想出门送去店里,大家就可以使用手机线上下单预约取货,会有专门的人上门来取衣服,让你能够轻松的进行洗护。 闪站侠洗衣洗鞋小程序,提供了足不出户就能预约人员上门去 衣送洗…

vue3+vite+ts项目打包时出错

项目中引入了element-plus国家化的配置,然后进行项目打包,报下面的错误 解决方法: 在main.ts中添加 // ts-ignore

Linux使用固定ip地址

设置静态ip,我们就需要修改 /etc/sysconfig/network-scripts/ifcfg-ens33 配置文件。 vim /etc/sysconfig/network-scripts/ifcfg-ens33 //进入网卡ens33的配置页面 (1) 将 BOOTPROTO dhcp 改成 BOOTPROTO static 也就是将动态ip,改成静态i…

损失函数总结(十六):NRMSELoss、RRMSELoss

损失函数总结(十六):MSLELoss、RMSLELoss 1 引言2 损失函数2.1 NRMSELoss2.2 RRMSELoss 3 总结 1 引言 在前面的文章中已经介绍了介绍了一系列损失函数 (L1Loss、MSELoss、BCELoss、CrossEntropyLoss、NLLLoss、CTCLoss、PoissonNLLLoss、Ga…

如何设置带有密码的excel只读模式?

Excel只读模式大家都不陌生,那大家知道带有密码的只读模式吗?今天给大家分享如何设置带有密码的只读模式。 打开excel文件,将文件进行【另存为】设置,然后停留在保存路径的界面中,我们点击下面的工具 – 常规选项 在常…

后台管理系统开源项目

最近项目没有什么事做,就自己整理,修改了一些vue2,react的后台管理系统项目,方便以后有需要可以直接提取,当然也方便了大家 vue2技术栈 lyl-vueProjectAdmin: vue2后台管理系统 react技术栈 lyl-reactAdminProject:…

Redis未授权访问-CNVD-2019-21763复现

Redis未授权访问-CNVD-2019-21763复现 利用项目: https://github.com/vulhub/redis-rogue-getshell 解压后先进入到 RedisModulesSDK目录里面的exp目录下,make编译一下才会产生exp.so文件,后面再利用这个exp.so文件进行远程代码执行 需要p…

mitmproxy安装以及模拟接口数据返回

使用pycharm直接安装,pip install mitmproxy 安装成功后直接使用命令mitmdump --version查看版本 然后自己本地下载https://mitmproxy.org/downloads/#10.1.1/ 之后一步步安装即可 安装成功后这里会出现一个.mitmproxy文件 双击这个文件进入开始安装证书 我…

Java线程安全问题

什么是线程安全问题 用程序模拟线程安全问题 主线程 package com.itheima.d3;public class ThreadTest {public static void main(String[] args) {//1、创建一个账户对象,代表两个人的共享账户Accout acc new Accout("ICBC-110",100000);//2、创建两个…

分享一款4G低功耗摄像头接入物联网平台解决方案

首先介绍硬件方案: 应用场景-4G低功耗摄像头 该方案中,Module为G8100B(4G模块),HOST为海思摄像头(Linux or LiteOS),G8100B的USB可以在Host端虚拟出串口和网卡,G8100B符合以下条件进入休眠&…