Go语言--快速入门

ops/2024/10/15 12:28:14/

Go语言特点

我们先看一下简单的Go语言程序

package mainimport "fmt"func main()  
{  // 错误,{ 不能在单独的行上fmt.Println("Hello, World!")
}

我们可以看到外型非常像我们的JAVA,但是不需要;作为结尾,也就是我们使用行分隔符。
之后的特点就是声明变量的方式,我们使用了关键字var,

package main
import "fmt"
func main() {var a string = "Runoob"fmt.Println(a)var b, c int = 1, 2fmt.Println(b, c)var d float64//声明了stringVal这个变量stringVal:="s"var x,y bool=true,true
}
package mainimport "fmt"func main() {const LENGTH int = 10const WIDTH int = 5   var area intconst a, b, c = 1, false, "str" //多重赋值const x string="huihui"area = LENGTH * WIDTHfmt.Printf("面积为 : %d", area)println()println(a, b, c)   
}

我们的语言常量的关键字是const,用法和var一样。

package mainimport "fmt"func main() {var a int = 4var ptr *int=nil/*  & 和 * 运算符实例 */ptr = &a     /* 'ptr' 包含了 'a' 变量的地址 */fmt.Printf("a 的值为  %d\n", a);fmt.Printf("*ptr 为 %d\n", *ptr);
}

这里指针的用法和我们的C语言一致,不同是指针的空值用nil表示。

/* 函数返回两个数的最大值 */
func max(num1, num2 int) (int,int) {/* 声明局部变量 */var result intif (num1 > num2) {result = num1} else {result = num2}return result ,result
}

我们的函数定义关键字是func,但是不同的是我们的函数返回值类型是放在后面的。同时GO语言还可以同时返回多个参数。

package mainimport "fmt"func main() {var n [10]int /* n 是一个长度为 10 的数组 ,定义数组*//* 定义不定长数组*/balance :=[...]float32{1.2,32.3,23.4}/* 输出每个数组元素的值 ,可以用索引来读取*/for j = 0; j < 10; j++ {fmt.Printf("Element[%d] = %d\n", j, n[j] )}
}

GO语言定义数组的方式是将[]type放在我们的标识符后面,如果是不定长的数组,我们使用[…]来定义。

package mainimport "fmt"func main() {var a int= 20   /* 声明实际变量 */var ip *int        /* 声明指针变量 */ip = &a  /* 指针变量的存储地址 */var b *int=nil fmt.Printf("a 变量的地址是: %x\n", &a  )/* 指针变量的存储地址 */fmt.Printf("ip 变量储存的指针地址: %x\n", ip )/* 使用指针访问值 */fmt.Printf("*ip 变量的值: %d\n", *ip )
}

和C语言一样我们使用*来声明指针变量,用&获得变量的地址。

package mainimport "fmt"func main() {var numbers = make([]int,3,5)var numbers1 []string={"333","ddfff","ddffccc"}printSlice(numbers)
}func printSlice(x []int){fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

GO语言切片就是没有固定长度的可变数组,所以定义时就是不加数字,还可以使用make来进行定义。

package main
import "fmt"
// 声明一个包含 2 的幂次方的切片
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
//定义cahnnel,元素有两个整型
ch:=make(chan int,2)func main() {
//接受两个整型元素ch->1ch->2//遍历ch中的value值for value :=ch{fmt.Printf(value)}// 遍历 pow 切片,i 是索引,v 是值for i, v := range pow {// 打印 2 的 i 次方等于 vfmt.Printf("2**%d = %d\n", i, v)}//只遍历Keyfor _,v:= range pow{fmt.Printf(v)}
}

Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。


http://www.ppmy.cn/ops/125938.html

相关文章

低代码可视化-uniapp商城首页小程序-代码生成器

在设计一个小程序的首页时&#xff0c;包含轮播图、通知栏和商品列表这三个元素是非常常见且有效的布局方式。这样的设计既能够吸引用户的注意力&#xff0c;又能够高效地展示信息和商品。 轮播组件 小程序首页幻灯片通常位于小程序的顶部或显著位置&#xff0c;通过滑动屏幕可…

使用tgz包下载安装clickhouse低版本

1.下载安装包 官方下载地址&#xff1a;https://packages.clickhouse.com/tgz/stable 阿里云下载地址&#xff1a;clickhouse-tgz-stable安装包下载_开源镜像站-阿里云 共需要下载四个文件 clickhouse-common-static-20.3.10.75.tgz clickhouse-common-static-dbg-20.3.10.7…

Java利用itextpdf实现pdf文件生成

前言 最近公司让写一个数据页面生成pdf的功能&#xff0c;找了一些市面代码感觉都太麻烦&#xff0c;就自己综合性整合了一个便捷的工具类&#xff0c;开发只需简单组装数据直接调用即可快速生成pdf文件。望大家一起学习&#xff01;&#xff01;&#xff01; 代码获取方式&am…

3.Linux中安装redis及环境搭建

文章目录 1.在Ubuntu中安装redis2.在Centos中安装Redis 5(不建议&#xff0c;现在yum仓库已经停止维护)3.Ubuntu中安装mysql4.Ubuntu中安装java85.Ubuntu中启动Java程序6.环境搭建及介绍 大家好&#xff0c;我是晓星航。今天为大家带来的是 Linux中安装redis 相关的讲解&#x…

slab 缓存以及slabtop 命令学习

一、slab 缓存介绍 1.1、什么是slab 缓存 SLAB缓存是Linux内核中用于优化内存分配和管理的一种机制&#xff0c;特别针对频繁分配和释放的固定大小的小对象。它是基于 通用内存分配器(如伙伴系统) 之上的一个中间层&#xff0c;旨在通过减少分配和释放小对象的开销、降低内存…

2025 -中医儿科学 -考研-执业

第1章 中医儿科学发展简史 1.据我国古代文献记载&#xff0c;最早有小儿医的时期是&#xff1a;( ) [单选] A.春秋战国至两汉 B.秦至两汉 C.隋唐 D.唐朝 E.宋朝 正确答案: A 2.我国最早记载婴儿病的医书是&#xff1a;( ) [单选] A.《内经》 B.《千金方》 C.《颅囟经…

SRAM中的bit-write mask 和 word-write mask选项

1. 概念 bit-write mask&#xff1a; 定义&#xff1a;bit-write mask 允许在写操作中对单个字的每个位&#xff08;bit&#xff09;进行独立的控制。即&#xff0c;在写入操作时&#xff0c;特定的位可以被屏蔽&#xff0c;从而只修改需要变更的位&#xff0c;而不影响其它未…

JVM 内存区域 堆

堆是JVM中相当核心的内容&#xff0c;因为堆是JVM中管理的最大一块内存区域&#xff0c;大部分的GC也发生在堆区&#xff0c;那接下来就让深入地探究一下JVM中的堆结构。 需要明确&#xff0c;一个JVM实例只存在一个堆内存&#xff0c;堆区在JVM启动的时候就被创建&#xff0c…