编程语言科普

go 语言是

  • 编译型语言
  • 静态强类型语言(强类型:类型固定)
  • 跨平台的编译型语言

常见语言的背景

GO:2009年11月出的(Google 出的)

python:1989年出的

java:1990年出的

c#:微软

java:sun公司(后来被甲骨文收购了)

-c开发:在windows上开发,编译好的只能在windows上用
-java横空出世:跨平台,一处编码到处运行
-运行在java虚拟机之上
-编译成字节码文件:中间态
-go:跨平台编译
-在windows平台可以编译出linux下的可执行文件 -java概念普及:
-jdk:开发人员需要装jdk
-jre:运行java程序,需要装
-jvm:java虚拟机
-javase:java基础,安卓方向
-javaee:javaweb方向
-ssh框架:spring structs Hibernate
-ssm框架:spring springmvc mybatis
-spring全家桶
-springboot:一站式搞定
-springclode:微服务开发
-javame:手机端开发
-大数据:

go 为什么这么火?

-docker容器化部署、devops 比较火
-k8s 是用go写的:容器编排
-在区块链领域:第一个开源的区块链项目是用go写的
-性能高,特别适合服务端开发
-部署容易

环境搭建(很重要)

去官网下载安装包,图形化一步步安装(非常简单)

命令

1)go version 查看 go 版本

2)go env 查看 go 的配置

  • GOPATH=C:\Users\Administrator\go go 代码的存放路径(可以改,环境变量里)(代码必须放在 GOPATH 对应的路径下)

    下载的第三方包是默认放在 GOPATH 路径下的

  • GOROOT=E:\Go go 的路径,如果没有配置,内置包可能就用不了

    导包的时候,查找路径:先去 goroot 中找,然后去 gopath 中找,再找不到,否则报错(所以自己写的包必须放在 gopath 里面,不然找不到)

ide 编辑器

  • GoLand (jetbrians)
  • sublime
  • vscode
  • liteIDE

补充:

主流的 IDE (集成开发环境)

jetbrains 全家桶(差不多把市面上所有编程语言的开发工具都写了一遍)

可以用 pycharm 的激活码激活(一家的激活码是通用的)

注释

//单行注释

/*
多行注释
多行注释
*/

第一个程序 Hello world!

first.go

package main  // 表示当前 go 文件属于哪个包(main)
// 且必须放在第一行(注释除外) import "fmt" // 编译型语言需要有一个入口文件: main 包下的 main 函数
func main() { //定义了一个main函数
fmt.Println("Hello world!") // 打印 Hello world!
}

编译与执行

  • 编译、执行(命令行)

    go build first.go(文件名)

    first.exe (windows 平台生成的运行文件)

  • 编译并执行(不生成对应平台的运行文件)

    go run first.go(文件名)

变量类型

关键字 var

package main //表示是main包的
import "fmt" func main() {
// 三种定义方式(变量不能重复定义)
// var关键字 变量名 变量类型 = 值
var a int =10 //定义了一个int类型的变量a ,并把10赋值给它
var b = 10 // 变量会自动推导类型
c := 10 // 变量会自动推导类型(最简短的写法) // 定义的时候可以不赋初值
// int 类型默认值为 0 :var a int
// string 类型默认值为 "" :var s string
// 布尔类型默认值为 false :var b bool //同时定义多个变量
var a = 10
var b = 100
var a, b int
var a, b int = 10, 20
var a, b = 10, 20
var a, b = 10, "lqz"
a, b := 10, 20
a,b := 10,"lqz"
fmt.Println(a)
fmt.Println(b) var (
name = "naveen"
age = 29
height int
)
fmt.Println(name)
fmt.Println(age)
fmt.Println(height)
//naveen
//29
//0
}
  • 变量不管用不用,都必须先指定类型(或者有值了让它自己推导)
  • 变量类型一旦定义了,后续不可更改(强类型语言,类型是固定的)

数字类型

/*
int类型:表示整数,int8 int16 int32 int64
计算机最小计量单位:bit位 int8 是 8个比特位=1个字节,表示的范围是:正负2的7次方减1
在32位机器上int 就是int32 ,在64位机器上int就是int64 uint类型:表示正整数 uint8 uint16... float类型:表示小数只有float32和float64 complex64类型:复数 byte: uint8的别名 rune:int32的别名
*/

字符串类型

s := "123"  // 只能用双引号引起来,单引号不行
s2 := `这是一个
可以换行
的字符串` // 也可以用反引号包起来,反引号内的字符串可以换行

布尔类型

isnull := false  // go 中的布尔类型都是小写的,与python不同

常量

关键字 const

const a = 10  // 也可以类型推导
const b = "127.0.0.1"

函数

关键字 func

可以用 _ 接收不要的返回值,

//函数定义,语法
//func关键字 函数名(参数1 类型,参数2 类型) (返回值类型){}
//无参数,无返回值
func test() {
fmt.Println("xxx")
}
//有两个int类型的参数
// func test(a int,b int) { // 可简写成下面的
func test(a ,b int) {
fmt.Println(a+b)
} //有一个数字类型返回值,一定要指定返回值类型
func test(a,b int) int {
return a+b
} func test(a,b int) string {
return "lqz"
} //返回多个值
func test(a,b int) (int,string) {
return a+b, "成功"
} //命名返回值
func test(a,b int) (c int, d string) {
c=10
d="成功"
return // 在函数定义时指定的返回值会自动返回,不需要 return 的时候再写一遍
} //在go中没有位置参数和关键字参数,都是位置参数,也没有默认参数
func test(a,b int) int {
return a+b
} //不定长参数 "..."
func test(a ...interface{}) { // interface{} 这是个特殊情况,可以接收所有类型的参数
fmt.Println(a)
}

1)命名返回值(函数返回值定义那里),定义了就直接可以用了(不需要再在函数体里定义),也不需要再指定把它传出去(会自动把它一并 return 出去)

2)在 go 中没有位置参数和关键字参数这么一出,都是位置参数,也没有默认参数

课后作业

  1. 搭建go语言环境,并打印helloworld
  2. 定义一个函数,输入一个三位数数字,返回两个返回值:每一位的平方、每一位的立方和 (例如345 返回3的平方+4的平方+5的平方 ,3的立方+4的立方+5的立方)
  3. 给上面的函数加入时间统计(time模块)

    进阶

    1. 写一个函数,返回函数类型
    2. 写一个函数,实现统计函数执行时间功能

Go-环境搭建-hello world-变量常量定义-函数使用基础的更多相关文章

  1. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十四)定义一个avro schema使用comsumer发送avro字符流,producer接受avro字符流并解析

    参考<在Kafka中使用Avro编码消息:Consumer篇>.<在Kafka中使用Avro编码消息:Producter篇> 在了解如何avro发送到kafka,再从kafka ...

  2. PHP输出当前进程所有变量 / 常量 / 模块 / 函数 / 类

    <?php /* 不知道怎么打印某个函数的参数和相关分类类型的所有函数 以下函数如果没有参数,返回的都是一个数组get_defined_functions() 获取所有已经定义的函数get_de ...

  3. Java 学习笔记 第一章:Java语言开发环境搭建

    第一章:Java语言开发环境搭建 第二章:常量.变量和数据类型 第三章:数据类型转换.运算符和方法入门 1.Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟 ...

  4. iOS开发Swift篇(01) 变量&常量&元组

    iOS开发Swift篇(01) 变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年 ...

  5. 李洪强iOS开发Swift篇---11_变量&常量&元组

    李洪强iOS开发Swift篇---11_变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对 ...

  6. c语言中宏定义和常量定义的区别

    他们有共同的好处就是"一改全改,避免输入错误"哪两者有不同之处吗?有的. 主要区别就在于,宏定义是在编译之前进行的,而const是在编译阶段处理的 宏定义不占用内存单元而const ...

  7. Swift-基础语法之变量&常量&元组

    使用 let来声明一个常量,用 var来声明一个变量.常量的值在编译时并不要求已知,但是你必须为其赋值一次.这意味着你可以使用常量来给一个值命名,然后一次定义多次使用 myVariable = let ...

  8. Java部署环境搭建(Linux)

    环境搭建必须jdk.tomcat.mysql(基础) 额外的软件包项目中可能用到 jdk:它包含jre和开发所需完整类库. tomcat:它是一个web容器,项目通常往webapps下扔,便于外界访问 ...

  9. vue 环境搭建笔记

    环境 开发工具:VS Code vue版本: 2.x 准备 使用 npm 包管理器进行安装,也可以使用 yarn 包管理器. 可以使用淘宝的 npm 镜像,国内速度更快. 使用方式: $ npm in ...

随机推荐

  1. Ubuntu14.04 系统复制迁移到新的机器上

    1.打包系统文件 制作启动盘,然后进入bios, #进入bios的boot标签选择sandisk启动 如果没有找到u盘进入save & exit标签页选择boot override中的sand ...

  2. HTML页面预览表格文件内容

    背景简介 在将一个表格文件上传到服务器上之前,JS读取表格文件并将文件内容输出到页面中 vue项目 第三方 exceljs 安装 npm install exceljs 插件使用 github 中文文 ...

  3. Ubuntu14.04(indigo)实现RGBDSLAMv2(数据集和实时Kinect)

    Ubuntu14.04(indigo)实现RGBDSLAMv2(数据集和实时Kinect v2) 一.在.bag数据集上跑RGBDSLAMv2 RGBDSLAMv2指的是Felix Endres大神在 ...

  4. Leetcode题目322.零钱兑换(动态规划-中等)

    题目描述: 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: c ...

  5. lareval重命名created_at和updated_at字段

    lareval重命名created_at和updated_at字段 一.总结 一句话总结: 要改变created_at和updated_at的名称,模型和数据迁移里面都需要改变 在模型中指定数据类型之 ...

  6. kotlin之函数的范围和泛型函数

    kotlin 中函数可以定义为局部函数,成员函数以及扩展函数 局部函数:就是嵌套在函数内的函数 成员函数就是定义在类或者对象之内的函数 泛型函数就是函数可以带有泛型参数,可通过尖括号来指定

  7. Spring Boot确保Web应用安全(登陆认证)

    Spring Boot官方提供了一个登陆认证的清晰易懂的 例子 , 我们在次以此例展开演示Spring Boot是如何实现登陆认证的. 首先我们去 https://start.spring.io/ 下 ...

  8. jmeter解决乱码

    在jmeter.properties 这个文件里面 找到sampleresult.default.encoding=xx 后面xx改成utf-8,然后取消注释 解决jmeterbody里面中文显示不出 ...

  9. Java工程师学习指南第4部分:Java并发编程指南

    本文整理了微信公众号[Java技术江湖]发表和转载过的Java并发编程相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧吧. [纯干货]Java 并发进阶常见面试题总结 [Java基本功] ...

  10. mysql写存储过程根据时间变化增加工龄

    在工作中遇到要程序根据时间自动增加工龄的需求. php没办法自己发起请求,又不想在服务器上写计划任务crontab,通过用户请求来更改又不能保证用户会去操作. 用数据库的存储过程和事件来完成. 数据库 ...