Go语言学习1——Go语言基础了解

向右看齐 2022-11-08 11:30 408阅读 0赞

安装环境

GOROOT GOPATH

有编程基础的人开始学go时会对这两个概念很迷惑,其实:

GOROOT是指:go的安装目录,比如说从官网下的安装包的解压目录

GOPATH是指:工作目录,什么是工作目录?比方说新建个项目,叫test,这个目录就是工作目录

GOPATH是GO语言使用的一个环境变量,使用绝对路径提供项目的工作目录,适合处理大量 Go语言源码、多个包组合而成的复杂工程。

关于GOPATH设置,建议不要做全局设置而是跟随相应的项目设置。

go mod

在go1.11之后go mod的加入使得我们写代码不用在gopath之下写了,具体做法如下:

  • 1, 新建一个目录,在GOPATH之外,作为项目目录,cd进去
  • 2, 确保设置了GO111MODULE="on"GOPROXY="https://goproxy.cn"
  • 3, go mod init “项目名”,生成一个go.mod
  • 4, import需要的包,执行go mod tidy, 会自动下载包,下载到GOPATH下的pkg目录

基础知识

开始于HelloWorld

  1. package main //声明这是一个main包,每个go程序都应该有一个main包
  2. import "fmt" //相当于python中的imoprt导入其他函数
  3. func main() {
  4. // 函数的固定写法 // main函数是启动的的一个函数
  5. fmt.Println("HelloWorld")
  6. } // //和/**/都是注释

go语言中的包

包的概念

Go语言的代码通过(package)组织,包类似于其它语言里的库(libraries)或者模块(modules)。一个包由位于单个目录下的一个或多个.go源代码文件组成,目录定义包的作用。每个源文件都以一条package声明语句开始,这个例子里就是package main,表示该文件属于哪个包,紧跟着一系列导入(import)的包,之后是存储在这个文件里的程序语句。

注意:

  • 一个Go语言程序有且只有一个main函数,他是Go语言程序的入口函数,且必须属于main包,没有或者多于一个进行Go语言程序编译时都会报错
  • 文件名与包名没有直接关系,不一定要将文件名与包名定成同一个,。
  • 文件夹名与包名没有直接关系,并非需要一致,不过建议同名。
  • 同一个文件夹下的文件只能有一个包名,否则编译报错。
包的引用

Go包的引入格式常见的有四种,下面以引用fmt包为例说明:

  • 标准引入:import fmt
  • 别名引入:import myfmt fmt 省略方式的引入:import . fmt这样就不需要加上fmt.来调用Println函数,相当于把fmt加入了当前命名空间
  • 单行导入:import package
  • 多行导入:

    1. import (
    2. "package1"
    3. "package2"
    4. )
导出
  • 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,那么使用这种形式的标识符的对象就可以被外部包的代码所使用 (像面向对象语言中的 public);
  • 标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )

go语言中的函数

一个函数的声明由func关键字、函数名、参数列表、返回值列表(这个例子里的main函数参数列表和返回值都是空的)以及包含在大括号里的函数体组成。

一个函数一般是这样:

  1. func name(parameter-list) (result-list) {
  2. body
  3. }

入门DEMO

1,使用go来实现echo命令

echo.go

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func echo() {
  7. var s, seq string
  8. for i := 1; i < len(os.Args); i++ {
  9. //println(os.Args)
  10. s += seq + os.Args[i]
  11. seq = " "
  12. }
  13. fmt.Println(s)
  14. }

main.go

  1. package main
  2. func main() {
  3. echo()
  4. }
  5. 11:32:32 zhq@manjaro test go build .
  6. 11:35:22 zhq@manjaro test ls
  7. echo.go hello.go main.go test
  8. 11:35:24 zhq@manjaro test ./test Hello World
  9. Hello World

2,查找重复的行

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os"
  6. )
  7. func dup() {
  8. counts := make(map[string]int)
  9. input := bufio.NewScanner(os.Stdin)
  10. for input.Scan() {
  11. counts[input.Text()]++
  12. }
  13. for line, n := range counts {
  14. if n > 1 {
  15. fmt.Printf("%d\t%s\n", n, line)
  16. }
  17. }
  18. }

使用CTRL+D来退出循环

3,简单的web程序

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. )
  7. func web() {
  8. http.HandleFunc("/", handler)
  9. log.Fatal(http.ListenAndServe("localhost:8000", nil))
  10. }
  11. func handler(w http.ResponseWriter, r *http.Request) {
  12. fmt.Println(w, "URL:", r.URL.Path)
  13. }
  14. 13:31:40 zhq@manjaro test curl localhost:8000/hello 1
  15. &{
  16. 0xc000208000 0xc000226000 {
  17. } 0x4de4c0 false false false false 0 {
  18. 0 0} 0xc00021e100 {
  19. 0xc000232000 map[] false false} map[] false 0 -1 0 false false [] 0 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0] [0 0 0] 0xc000230000 0} URL: /hello

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,408人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Go语言基础

    目录 Go语言特性 第一个Go程序 Go语言基础 常量 变量 数据类型 整型 浮点型 字符串 格式化字符串 字符类型 切片 包 总结 ------

    相关 GO语言基础

    Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson

    相关 go语言基础

    \---恢复内容开始--- 一: go 语言的介绍 1:go的概述 1 go语言(或 Golang)是Google在 2007 年开发的一种开源编程语言,于200