Golang基础教程

2023-11-03

第一章:走进Golang

Golang引入

  • 简介: Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种计算机编程语言语言。
  • 设计初衷: Go语言是谷歌推出的一种的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,"使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大。"
  1. 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。
  2. 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。
  3. 企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度确很慢,同时还存在内存泄漏的一系列的困扰需要解决。
  • 应用领域:

第一段程序:Hello Golang!

  • go基本目录结构:

  • 开始写代码:第一个HelloWorld :
package main //声明文件所在的包,每个go文件必须有归属的包
import "fmt" //引入程序中需要用的包,为了使用包下的函数  比如:Println
func main () { //main 主函数 程序的入口
    fmt.Println("Hello Golang!!") //在控制台打印输出一句话,Hello Golang!!
}
复制代码
  • 对源文件进行编译:go bulid

  • 执行操作

  • 也可以通过go run直接编译、执行文件(但不生成exe文件)

Golang执行流程

  • 执行流程分析:

  • 上述两种执行流程的方式区别

    1. 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件 变大了很多。

    2. 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有go开发环境的机器上,仍然可以运行
    3. 如果我们是直接go run go源代码,那么如果要在另外一个机器上这么运行,也需要go 开发环境,否则无法执行。
    4. go run运行时间明显要比第一种方式 长一点点
  • 编译注意事项: 编译后的文件可以另外指定名字:

语法注意事项

  • 源文件以"go"为扩展名。
  • 程序的执行入口是main()函数。
  • 严格区分大小写。
  • 方法由一条条语句构成,每个语句后不需要分号(Go语言会在每行后自动加分号),这也体现出Golang的简洁性。
  • Go编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错
  • 定义的变量或者import的包如果没有使用到,代码不能编译通过。
  • 大括号都是成对出现的,缺一不可

注释

  • 注释的作用: 用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性; 注释是一个程序员必须要具有的良好编程习惯。 将自己的思想通过注释先整理出来,再用代码去体现。

  • Golang中注释类型: Go支持c语言风格的/**/块注释,也支持c++风格的//行注释。行注释更通用,块注释主要用于针对包的详细说明或者屏蔽大块的代码

    • 行注释 // VSCode快捷键:ctrl+/ 再按一次取消注释

    • 块注释(多行注释) /**/ VSCode快捷键:shift+alt+a 再按一次取消注释

      注意:块注释中不可以嵌套块注释

提示:官方推荐使用行注释 //

代码风格

  • 注意缩进

    向后缩进:tab 向前取消缩进:shift+tab 通过命令完成格式化操作:

  • 成对编程 {} () “ ” ‘ ’
  • 运算符两边加空白 ( ps : 一般来说,写代码的时候都得这样,这是规范编写代码的好习惯 )
  • 以下代码是错误的:

go的设计者想要开发者有统一的代码风格

  • 行长约定:

    一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅

API

Go语言提供了大量的标准库,因此 google 公司也为这些标准库提供了相应的API文档,用于告诉开发者如何使用这些标准库,以及标准库包含的方法。

第二章 变量与数据类型

变量

  • 简单代码展示
package main
import "fmt"
func main(){
    //1.变量的声明
    var age int
    //2.变量的赋值
    age = 18
    //3.变量的使用
    fmt.Println("age = ", age);
    //声明和赋值可以合成一句:
    var age2 int = 19
    fmt.Println("age2 = ", age2);
    // var age int = 20;
    // fmt.Println("age = ", age);
    /*变量的重复定义会报错:
         # command-line-arguments
                .\main.go:16:6: age redeclared in this block
                        previous declaration at .\main.go:6:6
        */
    //不可以在赋值的时候给与不匹配的类型
    var num int = 12.56 //报错
    fmt.Println("num = ", num);
}
复制代码
  • 变量的四种定义方法、一次性声明多个变量(代码展示)
package main
import "fmt"
//全局变量:定义在函数外的变量
var n7 = 100
var n8 = 9.7
//设计者认为上面的全局变量的写法太麻烦了,可以一次性声明:
var (
    n9 = 500
    n10 = "netty"
)
func main(){
    //定义在{}中的变量叫:局部变量
    //第一种:变量的使用方式:指定变量的类型,并且赋值,
    var num int = 18
    fmt.Println(num) //18
    //第二种:指定变量的类型,但是不赋值,使用默认值 
    var num2 int
    fmt.Println(num2) //0
    //第三种:如果没有写变量的类型,那么根据=后面的值进行判定变量的类型 (自动类型推断)
    var num3 = "tom"
    fmt.Println(num3) //tom
    //第四种:省略var,注意 := 不能写为 =   
    sex := "男"
    fmt.Println(sex) //男
    fmt.Println("------------------------------------------------------------------")
    //声明多个变量:
    var n1,n2,n3 int
    fmt.Println(n1) //0
    fmt.Println(n2) //0
    fmt.Println(n3) //0
​
    var n4,name,n5 = 10,"jack",7.8
    fmt.Println(n4) //10
    fmt.Println(name) //jack
    fmt.Println(n5) //7.8
​
    n6,height := 6.9,100.6
    fmt.Println(n6) //6.9
    fmt.Println(height) //100.6
    //全局变量输出
    fmt.Println(n7) //100
    fmt.Println(n8) //9.7
    fmt.Println(n9) //500
    fmt.Println(n10) //netty
}
复制代码

基本数据类型

整数类型

  • 有符号整数类型

  • 无符号整数类型

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

Golang基础教程 的相关文章

随机推荐

  • goland语法面试题

    文章目录 1 关于 switch 语句 下面说法正确的是 2 下面代码能编译通过吗 可以的话 输出什么 3 interface 是可以指向任意对象的 Any 类型 是否正确 4 下面的代码有什么问题 1 关于 switch 语句 下面说法正
  • Unity5热更新ILRuntime 使用 Protobuf3.0

    Unity5热更新ILRuntime 使用 Protobuf3 0 须知 1 pb3官方用到了C 很多的新语法 所以在unity主工程中直接撸码是不可以的 还好github上面有同僚作了framework35版的 2 ILrt中的类目前是不
  • R语言与面向对象的编程(3):R6类

    专注系列化 高质量的R语言教程 本号已支持快捷转载 无需白名单即可转载 本系列将介绍R语言中三个与面向对象的编程 Object Oriented Programming OOP 相关的工具包 proto R6和基础包methods 这是一个
  • python中,@和-> 代表什么?

    今天把代码放到Hadoop平台时调试代码的时候报错 但是在本地测试并没有什么问题 然后可查看了下代码 报错的地方这么定义的 看到这个符号觉得很奇怪 因为在Python中确实没见过这个符号 后来查了一下 参考这个博主写的 https blog
  • noip2008 火柴棒等式 (暴力枚举)

    P1496火柴棒等式 Accepted 标签 搜索 NOIP提高组2008 描述 给你n根火柴棍 你可以拼出多少个形如 A B C 的等式 等式中的A B C是用火柴棍拼出的整数 若该数非零 则最高位不能是0 用火柴棍拼数字0 9的拼法如图
  • 算法基础\BFS\DFS

    1 200 岛屿数量 题目描述 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成 此外 你可以假设该网格的四条边均被水包围 示例 示
  • 41.cuBLAS开发指南中文版--cuBLAS中的Level-2gemvBatched()

    2 6 24 cublas
  • numpy 三维矩阵下采样小技巧

    问题描述 我们有一个 160 192 224 的三维矩阵 由于其过大 跑神经网络时显存不够 此时我们的一个思路就是对其进行一个简单的下采样 即没3x3x3的小方格里只取其中间的那个数 现在的问题是如何快速高效地实现这个计算 而不是使用多个f
  • 爬虫代理IP池怎么来的,可能遇到哪些问题,怎么解决

    目录 前言 一 代理IP对爬虫工作的重要性 二 代理IP池从哪里来 三 爬虫工作中可能会遇到哪些问题 四 怎么解决遇到的问题 总结 前言 爬虫工作离不开代理IP的支持 代理IP在爬虫工作中发挥重要的作用 但爬虫代理IP池从哪里来呢 爬虫工作
  • 口令破解(概述、暴力破解、字典破解、Hydra)

    文章目录 口令破解 概述 口令安全现状 破解方式 暴力破解 字典破解 Hydra quarkspwdump 口令破解 概述 现在很多地方都以用户名 账号 和口令 密码 作为鉴权的方式 口令 密码 就意味着访问权限 口令 密码 就相当于进入家
  • sata接口_无线网卡M.2(ngff) keyA/E接口扩展sata硬盘接口,黑群辉NAS系统

    miniPC普及 主板小型化后 PCIE接口数量减少到1 2个 甚至没有 sata接口数量也大幅减少 这样的主板对于想使用多硬盘 特别是要黑群辉NAS系统的 是不适合的 好在某些主板有无线网卡M 2 ngff 接口 为扩展sata存留了希望
  • 华为手机助手上架流程_2019年各大安卓应用商店上架经验,含流程,物料,方法,建议收藏...

    注册应用商店账号 申请应用商店上架是APP推广的第一步 这一步没做好 会延迟甚至耽误后续的工作 因此 做好上架工作尤为重要 今天姑婆根据我们自己APP上架的经验进行了整理 分享给大家 希望对大家有所帮助 一 安卓应用商店格局 据调查显示在中
  • 【ubuntu】安装tensorRT

    tensorRT官方安装文档TensorRT3 Installation Guide RC pdf位于tensorRT下载页面 1 tensorRT下载 将tensorRT下载到想要安装的目录 https developer nvidia
  • Java字符串

    文章目录 Java字符串 一 Java常用 API 二 String 类 1 String 类的特点 1 Java 程序中所有双引号字符串 都是 String 类的对象 2 字符串在创建之后 其内容不可更改 3 字符串虽然不可改变 但是可以
  • 在vite+vue3项目下el-image引用本地图片失败

    地址使用 xxx xxxx 绝对路径 地址使用require xx xx 和require xx xx 地址使用相对路径不行 xxx xxx
  • Unity 动态鼠标切换

    Header 获得需要替换的鼠标纹理 SerializeField private Texture2D cursorTexture private void OnMouseEnter 鼠标进入更换鼠标纹理 Cursor SetCursor
  • SpringBoot默认的日志管理logback

    1 SpringBoot使用的默认日志框架是Logback 并用INFO级别输出到控制台 日志输出内容元素具体如下 时间日期 精确到毫秒 日志级别 ERROR WARN INFO DEBUG TRACE 进程ID 分隔符 标识实际日志的开始
  • 为什么说声明式API比命令式API更优雅?

    点击上方 分布式实验室 关注公众号 回复 1 抽取纸质技术书 越来越多的工具已经从命令式范式转变为声明式范式 在本文中 我提出了一个框架 以帮你系统理解 React Kubernetes Terraform 等工具的架构 这些工具将有状态逻
  • Python线程池

    Python可以配置线程池 线程池的作用 预先开启设定的线程 当一个线程结束以后可以让程序继续使用该线程 设置线程的最大数目 让系统不至于因为开启多个线程而崩溃 在有大量空闲时间的进程中 配置多线程可以让程序并行处理 提高处理速度 线程池的
  • Golang基础教程

    第一章 走进Golang Golang引入 简介 Go 又称 Golang 是 Google 的 Robert Griesemer Rob Pike 及 Ken Thompson 开发的一种计算机编程语言语言 设计初衷 Go语言是谷歌推出的