go语言学习 1 -- 类型

2023-11-18

Go语言接受了函数式编程的一些想法,支持匿名函数与闭包,接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。

学习可参考书籍:老许的《go语言编程》、 老谢的《go web编程》、 雨痕的《go 语言学习笔记》、 golang.org上面的《Effective Go》、《The Go Programming Language Specification》、go标准库和github上众多开源库

Go 语言最主要的特性:

  • 自动垃圾回收
  • 更丰富的内置类型
  • 函数多返回值
  • 错误处理
  • 匿名函数和闭包
  • 类型和接口
  • 并发编程
  • 反射
  • 语言交互性

环境安装

go语言环境下载地址:https://golang.google.cn/dl/

  1. 下载二进制包:go1.4.linux-amd64.tar.gz。

  2. 将下载的二进制包解压至 /usr/local目录。

    tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz

  3. 将 /usr/local/go/bin 目录添加至PATH环境变量:

    export PATH=$PATH:/usr/local/go/bin

然后就可以国际惯例,helloworld了。

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!") }

$go run helloworld.go

going go !

package main
//第一行代码 package main 定义了包名,package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

import "fmt"
 //import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数

const(       //常量组   用iota可以实现枚举的功能
	A = iota      //A =0
	B		      //全局变量不给赋初值的话默认等于上一个,但是iota已经为1  B=1
	C="c"		//C=”c“
	D			//D=”c“
	E=iota		//再调用一次iota,恢复计数 E=4
	F			//F=5
)

const (
	_  = iota   // iota = 0,下划线 _ 为占位符,就是充个数而已
	KB  int64 = 1 << (10 * iota)// iota = 1 
	MB
	GB
	TB
)

cost x,y 12,"111"     //多个全局变量定义赋值;不填数据类型,会自动根据值来判断
func test(para int) (int, string){  
//para 是形参  ,inti,string是返回值类型,go语言允许有多个返回值
	d := struct {       // 函数内部定义变量可以使用 :=
	s string
	x int
	}{"abc", 100}
	
	//将 Pointer 转换成 uintptr,可变相实现指针运算,指针本身是不支持指针运算的
	p := uintptr(unsafe.Pointer(&d)) // *struct -> Pointer -> uintptr
	p += unsafe.Offsetof(d.x) // uintptr + offset
	p2 := unsafe.Pointer(p) // uintptr -> Pointer
	px := (*int)(p2) // Pointer -> *int
	*px = 200 // d.x = 200
	
	return 2,"aaa"  //  两个返回值
}

func main(){
	var s2 string    //局部变量若定义了却没使用,编译会报错
	var num byte 100      //变量放在类型前
	var num_n int =num    //会报错,go语言里类型转换都需要显性转换var num_n int =(int) num
	var flag int 100
	hello:="HELLO, WORLD"
	if flag{    //不能这样用,if后面只能判断bool值
		fmt.Println("true")
	}
	he1 := hello[:5]   //HELLO
	he2 := hello[7:]  //WORLD
	he3 := hello[1:5] //ELLO 从1开始,不包括5
	data, i := [3]int{0, 1, 2}, 0  //多变量一起赋值
	i, data[i] = 2, 100   //多变量赋值时,先计算所有相关值,然后再从左到右依次赋值,i=2,data[0]=100
	_ , s :=test()
	fmt.Println(s)
	for _ , r := range hello {   //range循环
		fmt.Println("%c,",r)
	}
}

在这里插入图片描述

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

go语言学习 1 -- 类型 的相关文章

  • go踩坑——no required module provides package go.mod file not found in current directory or any parent

    背景 准备运行下面代码 package main import github com gin gonic gin func main 创建一个默认的路由引擎 r gin Default GET 请求方式 hello 请求的路径 当客户端以G
  • go-zero使用Etcd进行服务注册代码分析

    代码分析 github com tal tech go zero v1 2 3 core discov publisher go package discov import github com tal tech go zero core
  • go字符串详解

    文章目录 摘要 1 byte和rune类型 2 字符串 string 3 练习 反转字符串 摘要 go字符串结构体包含 指向底层存储数组的指针 字符串长度 字符串按utf 8将字符编码成二进制数 然后存储在byte数组中 因为utf 8编码
  • Go语言学习路线

    gogogo git 地址 Go 学习 学习路线 2 基础知识 3 开发工具安装地址 下载 Go基础知识 链接为gitee地址 放心查看 基础结构 learn1 go 基础语法 learn2 go 数据类型 learn3 go 变量 lea
  • 带你使用Golang快速构建出命令行应用程序

    在日常开发中 大家对命令行工具 CLI 想必特别熟悉了 如果说你不知道命令工具 那你可能是个假开发 每天都会使用大量的命令行工具 例如最常用的Git Go Docker等 不管是做技术开发还是业务开发 都会有开发命令行程序的场景 例如如果是
  • Jenkins系列:3、wsl/ubuntu安装Jenkins及Jenkins构建可交叉编译的go程序

    Jenkins系列 3 wsl ubuntu安装Jenkins及Jenkins构建可交叉编译的go程序 文章目录 Jenkins系列 3 wsl ubuntu安装Jenkins及Jenkins构建可交叉编译的go程序 1 前言 2 wsl
  • 权重实现随机抽奖

    一般抽奖是怎么实现的 在实习期间学会了一种通用的写法 在这里记录一下 最近在学Golang语法基础 这里就用Golang来写 package main import fmt time math rand func main r rand N
  • beego+goAdmin+mysql+docker+natapp作为微信小程序地服务器“伪部署”

    写在前面的话 1 为什么我要叫伪部署 答 因为我把它们放在服务器运行 都是开发模式 生产模式实在不会弄 所以就这样了 2 系统环境 答 腾讯云服务器 系统为 ubuntu 版本不记得 应该是比较高的 3 前提假设 答 假设你的服务器已经安装
  • go 进阶 gin实战相关: 五. gin_scaffold 企业脚手架

    目录 一 gin scaffold 企业级脚手架 二 gin scaffold 脚手架安装及使用演示 文件分层解释 开始使用 1 配置开启go mod 功能 2 下载 安装 gin scaffold 3 整合 golang common 4
  • Golang三剑客之Pflag、Viper、Cobra

    如何构建应用框架 想知道如何构建应用框架 首先你要明白 一个应用框架包含哪些部分 在我看来 一个应用框架需要包含以下 3 个部分 命令行参数解析 主要用来解析命令行参数 这些命令行参数可以影响命令的运行效果 配置文件解析 一个大型应用 通常
  • 48.Go简要实现令牌桶限流与熔断器并集成到Gin框架中

    文章目录 一 简介 二 限流器与熔断器在微服务中的作用 1 限流器 对某个接口单位时间内的访问量做限制 2 熔断器 当服务连续报错 超过一定阈值时 打开熔断器使得服务不可用 三 具体实现 1 限流器实现逻辑 以令牌桶算法为例 2 限流器集成
  • go-zero开发入门-API网关开发示例

    开发一个 API 网关 代理 https blog csdn net Aquester article details 134856271 中的 RPC 服务 网关完整源代码 file main go package main import
  • go-zero目录结构和说明

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

    go zero 的网关往 rpc 服务传递数据时 可以使用 headers 但需要注意前缀规则 否则会发现数据传递不过去 或者对方取不到数据 go zero 的网关对服务的调用使用了第三方库 grpcurl 入口函数为 InvokeRPC
  • “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 格式 从数组创建切片
  • go开发--操作mysql数据库

    在 Go 中访问 MySQL 数据库并进行读写操作通常需要使用第三方的 MySQL 驱动 Go 中常用的 MySQL 驱动有 github com go sql driver mysql 和 github com go xorm xorm
  • go-carbon v2.3.4 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

    carbon 是一个轻量级 语义化 对开发者友好的 golang 时间处理库 支持链式调用 目前已被 awesome go 收录 如果您觉得不错 请给个 star 吧 github com golang module carbon gite
  • 【go语言】结构体数据填充生成md错误码文件

    这里使用pongo2这个模版引擎库进行md文件渲染 GitHub flosch pongo2 Django syntax like template engine for Go package main import fmt github
  • 【go语言】AST抽象语法树详解&实践之扫描代码生成错误码文档

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

随机推荐

  • java中创建类的数组

    例题 定义一个People类 要求如下 1 成员变量 name height weight 分别表示姓名 身高 cm 和体重 kg 2 构造方法通过参数实现对成员变量的赋初值操作 3 成员方法int check 该方法返回0 1 1 分别表
  • qt 串口粘包_Qt开发串口

    首先 在工程文件里面 QT serialport 在头文件里面 include 1 配置打开串口 QSerialPort myserial new QSerialPort this gt myserial gt setPortName CO
  • Linux slab 分配器剖析

    http www ibm com developerworks cn linux l linux slab allocator 了解 Linux 内存管理的方式 良好的操作系统性能部分依赖于操作系统有效管理资源的能力 在过去 堆内存管理器是
  • 【C++】指针和引用的区别

    引用的主要用途 修饰函数的形参和返回值 指针和引用的区别 引用没有空引用的概念 指针有 没有引用的引用 指针有二级指针 三级指针 引用必须初始化 指针不一定 但是最好初始化 防止野指针 引用加一 是引用实体加一 而指针是向后偏移一个类型的大
  • Ubuntu14.04下配置OpenGL及测试代码

    ubuntu14 04 64位下 默认是没有安装OpenGL相关依赖库的 若安装 则依次执行如下几条命令即可 sudo apt get update sudo apt get install build essential sudo apt
  • 【小5聊】jQuery基础之获取指定时间月份的最后一天

    描述 由于每个月份的天数不一样 所以每一个月份的最后一天值就不一样 new Date new Date 2020 06 01 00 05 00 setMonth new Date 2020 06 01 00 05 00 getMonth 0
  • 基于Java+Spring boot+Mybatis Plus 实现H5在线点餐系统

    前言 商城系统就是功能完善的网上销售系统 主要包括产品发布 在线订购 在线支付 在线客服 订单管理等功能模块 商城系统的日常管理如 商品添加修改 订单管理 回复客户留言等都是在线操作的 操作简单 会上网者就可以操作 商城系统成本低 节省开发
  • verilog中wire和reg类型的区别

    module counter parameter CNT MAX 25 d24 999 999 input wire sys clk input wire sys rst n output reg led out reg 24 0 cnt
  • state和props的区别__react

    首先说明 state和props是每个组件都有的 其次 state可变 但props不可变 这是官网给出的说法 但实操过程中 state的确可变 但props也可以变 是不是fb搞错了 当然不是 这里的可变与不可变 说的是改变后 是否会重新
  • 【前端】react-markdown配置解析

    文章目录 react markdown基本配置 同步预览配置 MdEditorComponent js reducer js initBlogState js action types js sync actions js store js
  • javascript各种类型数据在表达式中转换成布尔型值的规则总结

    javascript中有5种数据类型 分别为 Undefined Boolean Object Number String 这几类型的数据 当他们处在表达式里面的时候 js解析器会自动将其转换成布尔值来决定当前的条件究竟符合哪个逻辑分支 当
  • 部分A+B C语言

    1016 部分A B 15 分 正整数 A 的 DA 为 1 位整数 部分 定义为由 A 中所有 DA 组成的新整数 PA 例如 给定 A 3862767 DA 6 则 A 的 6 部分 PA 是 66 因为 A 中有 2 个 6 现给定
  • Qt 自定义提示框 类似QMessageBox

    前言 为什么需要设计自定义提示框呢 1 Qt自带的提示框样式单一 2 提示框的太小 3 界面风格跟项目的不搭配 程序执行效果 源码下载地址 https gitee com jiang bin yu qt custom prompt box
  • 亚马逊云科技使用心得:当初我曾错过的那些宝贵经验

    在今天的文章中 我整理出了大量当初曾经错过 而至今仍将我追悔莫及的Amazon Web Services 简称AWS 使用心得 在几年来的实践当中 我通过在AWS之上新手构建及部署各类应用程序而积累到了这些经验 虽然内容有些杂乱 但相信仍然
  • windows10下安装kali子系统

    写在前面 为什么我会想到在窗下装一个卡利 作为一个小白 平时做CTF题的时候 有时会用到python2 7环境 比如一些脚本需要 还有窗户下用的SqlMap的话 好像只支持在python2 7 之前被这个坑了好久 想用它的时候突然发现我的S
  • 个人三年规划建议

    一 前言 最近在 编程导航 有位鱼友的关于职业规划的提问 对于刚进入职场的新人来说 是很常见的问题 下面我分享出来 也希望能帮助到刚进入职场的同学们 在面对未来规划的时候 也有些参考 我的建议不一定适合每一位同学 但有些共性的东西是通的 我
  • innerHTML与XSS攻击

    HTML5为所有元素提供了一个innerHTML属性 既能获取对象的内容又能向对象插入内容 属性值 HTML标签 文本 浏览器会将属性值解析为相应的DOM树 HTML解析器在浏览器中是底层代码比JavaScript方法快很多 同时意味着替换
  • C++新特性03_迭代器iterator及类型推导auto(迭代器:用于容器中数据遍历;动态数组(vector)和链表(list)遍历;堆上下限标志位;类型推导auto:编译时自动推导数据类型)

    迭代器iterator及类型推导auto 1 迭代器 用于容器中数据的遍历操作 1 1 普通数组与动态数组定义及遍历方式 1 1 1 数组 普通的数组 一旦申请 不能再扩增 1 1 2 动态数组 vector 不用指定其大小 会根据数组当前
  • mybatis级联查询

    用户表 CREATE TABLE sys user userid varchar 50 NOT NULL roleid int 11 NOT NULL username varchar 50 DEFAULT NULL COMMENT 用户名
  • go语言学习 1 -- 类型

    Go语言接受了函数式编程的一些想法 支持匿名函数与闭包 接受了以Erlang语言为代表的面向消息编程思想 支持goroutine和通道 并推荐使用消息而不是共享内存来进行并发编程 总体来说 Go语言是一个非常现代化的语言 精小但非常强大 学