专栏首页小码农漫漫积累路Go-环境搭建-hello world-变量常量定义-函数使用基础

Go-环境搭建-hello world-变量常量定义-函数使用基础

编程语言科普

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.写一个函数,实现统计函数执行时间功能

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java世界最常用的工具类库

    Java世界有很多实用的工具类框架,今天介绍3个使用频率最高的框架。有很多实用的工具类并没有全部列出来,只列出了最基础的一部分,感兴趣的小伙伴,可以看官方的ap...

    Java识堂
  • 如何用一句话总结23种设计模式

    创建型模式简单来说就是用来创建对象的。一共有五种:单例模式、建造者模式、工厂方法模式、抽象工厂模式、原型模式。

    lyb-geek
  • Tool之Host/Target符号同步

    默认情况下,在Tornado2.x/VxWorks5.x里,Host端动态加载应用程序后,Target端是看不到的,当然也就无法调用/访问了。多数人在工作时,习...

    Taishan3721
  • 面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别

    Hashtable和HashMap都实现了Map接口,但是Hashtable的实现是基于Dictionary抽象类的。Java5提供了ConcurrentHas...

    用户6182664
  • 通过 20 个棘手的ES6面试问题来提高咱们的 JS 技能

    ECMAScript 6(以下简称ES6)是 JS 语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得 JS 语言可以用来编写复杂的大型应用程序...

    前端达人
  • Java网络编程与NIO详解8:浅析mmap和Direct Buffer

    本文转自:https://www.cnblogs.com/huxiao-tee/p/4660352.html

    Java技术江湖
  • Spring周边:日志——总结

    门面设计模式是面向对象设计模式中的一种,日志框架采用的就是这种模式,类似 JDBC 的设计理念。它只提供一套接口规范,自身不负责日志功能的实现,目的是让使用者不...

    WEBJ2EE
  • 恕我直言,在座的各位根本不会写 Java!

    自 2013 年毕业后,今年已经是我工作的第 4 个年头了,总在做 Java 相关的工作,终于有时间坐下来,写一篇关于 Java 写法的一篇文章,来探讨一下如果...

    java思维导图
  • Spring周边:日志——下

    门面设计模式是面面向对象设计模式中的一种,日志框架采用的就是这种模式,类似JDBC的设计理念。它只提供一套接口规范,自身不负责日志功能的实现,目的是让使用者不需...

    WEBJ2EE
  • 新手也能看懂的线程池学习总结

    线程池提供了一种限制和管理资源(包括执行一个任务)。每个线程池还维护一些基本统计信息,例如已完成任务的数量。

    乔戈里

扫码关注云+社区

领取腾讯云代金券